PHP将unicode转换为十六进制
一个应用程序想让我插入字符串作为使用十六进制值正确编码的PHP将unicode转换为十六进制,php,unicode,hex,Php,Unicode,Hex,一个应用程序想让我插入字符串作为使用十六进制值正确编码的文本。,编码为Unicode\u No\u Compression 例如,对于Sześćsiedem来说,正确的十六进制字符串是0053007A0065015B01007002000730069006500640006D, dźbło=01790064017A00620142006F 不带特殊字符的字符串 =0053007400720069006E0067002000770069007400680020006E006F00200007300
文本。
,编码为Unicode\u No\u Compression
例如,对于Sześćsiedem
来说,正确的十六进制字符串是0053007A0065015B01007002000730069006500640006D
,dźbło
=01790064017A00620142006F
不带特殊字符的字符串
=0053007400720069006E0067002000770069007400680020006E006F002000073007000650063006100690061006C00200006300680061007002007
我试着使用MySQLHEX()
/UNHEX()
和dechex()
PHP,但无法找到如何进行此转换。有什么想法吗?试试这个:
$out = implode("",array_map(function($x) {return sprintf("%04X",ord($x));},str_split($in)));
一个班轮;) 我猜,您实际上看到的是UCS-2编码的十六进制版本。因此:
php > echo strtoupper(bin2hex(iconv('UTF-8', 'UCS-2', 'Źdźbło')));
01790064017A00620142006F
哦它不是多字节安全的,是吗?
ord
和str_split
都不是。我得到的结果略有不同,知道为什么吗?小端和大端问题,这取决于机器。尝试UCS-2BE
显式使用big-endian。