php中对字符串处理ord(),chr()与bin2hex(),hex2bin()函数的用法

最近遇到字符串编码相关的一些问题(比如部分字符串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进制数拼接还原后输出 ‘中’ 。

文档导航