проблема php bin2hex - PullRequest
       10

проблема php bin2hex

2 голосов
/ 10 января 2011

Я написал небольшой скрипт php для преобразования строки в HEX, но у меня возникла проблема или я что-то пропустил. Вот небольшой тест:

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

Результат, который я получаю для 'a' (илилюбой ASCII) является правильным, но для китайского или иврита или арабского языка это не такполучить неправильные значения из PHP.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 января 2011

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 () для получения дополнительной информации.

0 голосов
/ 10 января 2011
  • e3 = 227
  • 81 = 129
  • a0 = 160

Вероятно, это 3-байтовый символ Unicode, поэтому три шестнадцатеричных значения возвращаются bin2hex(). Посмотрите этот вывод phpsh, если вы все еще в замешательстве:

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