PHP hex字符串错误修复求助:bin2hex输出结果不符问题
问题修复:PHP bin2hex 结果不符合预期
问题根源
你遇到的结果差异本质是字符串编码问题:
- 输入字符串为UTF-8编码,其中
«(U+00AB)和ª(U+00AA)这类字符在UTF-8中以双字节形式存储(分别是c2ab、c2aa)。 bin2hex会直接输出字符串每个字节的十六进制值,因此得到带c2前缀的结果。- 你预期的
74AB696B68AB6E6779AA75,对应这些字符在**Latin-1(ISO-8859-1)**编码下的单字节值(ab、aa)。
修复方案
将UTF-8编码的字符串转换为Latin-1编码后,再调用bin2hex即可得到预期结果:
方案1:使用mb_convert_encoding
$str = 't«ikh«ngyªu'; $latin1_str = mb_convert_encoding($str, 'ISO-8859-1', 'UTF-8'); echo bin2hex($latin1_str); // 输出:74AB696B68AB6E6779AA75
方案2:使用iconv
$str = 't«ikh«ngyªu'; $latin1_str = iconv('UTF-8', 'ISO-8859-1', $str); echo bin2hex($latin1_str); // 输出:74AB696B68AB6E6779AA75
注意事项
如果原始字符串本身就是Latin-1编码,直接调用bin2hex即可。但PHP环境通常默认字符串为UTF-8编码,因此需要显式执行编码转换。
内容的提问来源于stack exchange,提问作者Lưu Hậu
相关产品推荐
相关产品推荐

