最近遇到字符串编码相关的一些问题(比如部分字符串echo后显示为乱码,需要用到bin2hex转换为16进制显示),发现对部分ascii相关的字符串函数还是理解不够透彻,所以在此整理记录下。
##ord函数
ord(sting)
ord()函数用来取字符串的首个字符的 ASCII 值
##chr函数
string chr()
chr()函数从指定的 ASCII 值返回字符。
ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置 0,而十六进制值被定义为带前置 0x。
<?php
echo chr(64); // 十进制
echo chr(064); // 八进制值
echo chr(0x64); // 十六进制值
//输出分别为 @ 4 b
?>
##bin2hex函数
bin2hex(string)
bin2hex() 函数把 ASCII 字符的字符串转换为十六进制字符串值。(十六进制为0xe2,对应的十六进制字符串为e2)
##hex2bin函数
hex2bin(string)
hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。
##总结 这里以中文的 ‘中’ 作为演示,所有代码均在utf-8编码下进行测试。
$str = '中';
echo $str ."\n";
echo $bin = ord($str); //这里中是utf8编码,所以占用了3个字节,但是ord只能取出首个ascii字节.
echo "\n";
echo chr($bin) . "\n"; //因为取出‘中’首字节的ascii码为228,显示的的是ascii码228的字符。
//我们来看看‘中’的16进制码
echo bin2hex($str) . "\n"; //‘中’的16进制值为0xe4b8ad
echo chr(0xe4) . "\n"; //可以猜到0xe4是中的首位ascii值,也就是ascii为228的16进制值
echo chr(0xe4) . chr(0xb8) . chr(0xad) . "\n"; //将3字节的16进制数拼接还原后输出 ‘中’ 。