php bin2hex问题

时间:2011-01-10 11:52:07

标签: php hex character

我写了一个小的PHP脚本将字符串转换为HEX 但是我有问题或者我错过了什么,这是一个小测试:

$char='だ';
$a='a';
echo $char,':', bin2hex($char),"\n";
echo $a,':', bin2hex($a),"\n";

我得到的'a'(或任何ASCII)的结果是正确的,但对于中文或希伯来文或阿拉伯文是正确的 不正确这是输出:

だ:e381a0
a:61

这个长号是什么,来自charmap工具的这个字符(だ)的HEX是3060 但为什么我从PHP中得到错误的值。

感谢。

2 个答案:

答案 0 :(得分:2)

0xE381A0的UTF-8编码:

U+3060  だ   e3 81 a0    HIRAGANA LETTER DA

http://www.utf8-chartable.de/unicode-utf8-table.pl?start=12192

如果您的输入应该是UTF-8,那么您的输出是正确的。

更新

如果这是您想要的,您可以使用以下任何一项获得3060

iconv_set_encoding('internal_encoding', 'UTF-8');

echo bin2hex(iconv('UTF-8', 'ISO-10646-UCS-2', 'だ')) . PHP_EOL;
echo bin2hex(iconv('UTF-8', 'UNICODE-1-1', 'だ')) . PHP_EOL;
echo bin2hex(iconv('UTF-8', 'UTF-16BE', 'だ')) . PHP_EOL;

有关详细信息,请参阅iconv()

答案 1 :(得分:0)

  • e3 = 227
  • 81 = 129
  • a0 = 160

这可能是一个3字节的Unicode字符,因此bin2hex()返回三个十六进制值。如果你仍然感到困惑,请看这个phpsh输出:

php> =bin2hex('adam')
"6164616d"