PHP十六进制字符串错误,请帮我修复它


echo bin2hex('t«ikh«ngyªu'); //74c2ab696b68c2ab6e6779c2aa75 wrong result
//74AB696B68AB6E6779AA75 correct result

请帮我修一下

错误十六进制字符串

。'74'是't'的ASCII码点。«在ascii latin-1中有一个'ab'码点。显然,您正在使用UTF,并且«在那里有两个字节的'c2ab'码点。整个字符串长度为11个字符。只有在使用单字节编码时,十六进制字符串结果的长度可能为22(您想要的结果)。这与UTF不同(除非您的代码点低于7f)。如果您需要非utf编码的输入字符串,您应该首先将其转换为问题注释中提到的@Uwe:

echo bin2hex(mb_convert_encoding('t«ikh«ngyªu', 'ISO-8859-1', 'UTF-8'));

但我建议坚持使用UTF。