13 php regex encoding ucs2 utf-8
我有一个Unicode文本块,像这样:
?
?
?
?
?
?
?
Run Code Online (Sandbox Code Playgroud)
现在,我想将此原始Unicode文本块转换为UTF-8(HEX)代码点的文本块(请参阅此页面上的十六进制UTF-8列:https://en.wikipedia.org/wiki/UTF-8),by PHP
; 像这样:
\xe1\xbb\xa5
\xc6\xb0
\xe1\xbb\xa9
\xe1\xbb\xb2
\xe1\xbb\xb6
\xe1\xbb\xb4
\xc4\x90
Run Code Online (Sandbox Code Playgroud)
不是这样的:
0x1EE5
0x01B0
0x1EE9
0x1EF2
0x1EF6
0x1EF4
0x0110
Run Code Online (Sandbox Code Playgroud)
用PHP做任何方法吗?
我已经阅读了这个主题(PHP:将unicode codepoint转换为UTF-8).但是,它与我的问题不相似.
对不起,我不太了解Unicode
.
Jon*_*y 5 13
我想你正在寻找bin2hex()函数:
将二进制数据转换为十六进制表示
并通过前缀\x
到每个字节(00-FF)进行格式化
function str_hex_format ($bin) {
return '\x'.implode('\x', str_split(bin2hex($bin), 2));
}
Run Code Online (Sandbox Code Playgroud)
对于您的样品:
// utf8 encoded input
$arr = ["?","?","?","?","?","?","?"];
foreach($arr AS $v)
echo $v . " => " . str_hex_format($v) . "\n";
Run Code Online (Sandbox Code Playgroud)
请参阅eval.in上的测试(链接到期)
? => \xe1\xbb\xa5
? => \xc6\xb0
? => \xe1\xbb\xa9
? => \xe1\xbb\xb2
? => \xe1\xbb\xb6
? => \xe1\xbb\xb4
? => \xc4\x90
Run Code Online (Sandbox Code Playgroud)
解码示例: $str = str_hex_format("???????"); echo $str;
\ XE1\XBB\xa5\XC6\XB0\XE1\XBB版权所有\ xA9\XE1\XBB\XB2\XE1\XBB\XB6\XE1\XBB\XB4\XC4\X90
echo hex2bin(str_replace('\x', "", $str));
Run Code Online (Sandbox Code Playgroud)
???????
有关双引号字符串中的转义序列的 更多信息,请参阅php手册.\x
您需要做的主要事情是告诉 PHP 正确解释传入的 Unicode 字符。完成此操作后,您可以将它们转换为 UTF-8,然后根据需要转换为十六进制。
\n\n此代码片段采用 Unicode 格式的示例字符,将它们转换为 UTF-8,然后转储这些字符的十六进制表示形式。
\n\n<?php\n// Hex equivalent of "\xe1\xbb\xa5\xc6\xb0\xe1\xbb\xa9\xe1\xbb\xb2\xe1\xbb\xb6\xe1\xbb\xb4\xc4\x90" in Unicode\n$unistr = "\\x1E\\xE5\\x01\\xB0\\x1E\\xE9\\x1E\\xF2\\x1E\\xF6\\x1E\\xF4\\x01\\x10";\necho " length=" . mb_strlen($unistr, \'UCS-2BE\') . "\\n";\n\n// Here\'s the key statement, convert from Unicode 16-bit to UTF-8\n$utf8str = mb_convert_encoding($unistr, "UTF-8", \'UCS-2BE\');\necho $utf8str . "\\n";\n\nfor($i=0; $i < mb_strlen($utf8str, \'UTF-8\'); $i++) {\n $c = mb_substr($utf8str, $i, 1, \'UTF-8\');\n $hex = bin2hex($c);\n echo $c . "\\t" . $hex . "\\t" . preg_replace("/([0-9a-f]{2})/", \'\\\\\\\\x\\\\1\', $hex) . "\\n";\n}\n\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n生产
\n\nlength=7\n\xe1\xbb\xa5\xc6\xb0\xe1\xbb\xa9\xe1\xbb\xb2\xe1\xbb\xb6\xe1\xbb\xb4\xc4\x90\n\xe1\xbb\xa5 e1bba5 \\xe1\\xbb\\xa5\n\xc6\xb0 c6b0 \\xc6\\xb0\n\xe1\xbb\xa9 e1bba9 \\xe1\\xbb\\xa9\n\xe1\xbb\xb2 e1bbb2 \\xe1\\xbb\\xb2\n\xe1\xbb\xb6 e1bbb6 \\xe1\\xbb\\xb6\n\xe1\xbb\xb4 e1bbb4 \\xe1\\xbb\\xb4\n\xc4\x90 c490 \\xc4\\x90\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
1620 次 |
最近记录: |