UCS2/HexEncoded символы

Кто-нибудь может мне помочь? как я могу получить символы UCS2/HexEncoded

как "Привет" вернет "00480065006C006C006F"

Это значения HexEncoded:

0048 = H 0065 = e 006C = 1 006C = l 006F = o*

Также на арабском (!مرحبا عالم) вернет 06450631062d0628064b06270020063906270644064500200021

Как я могу получить закодированный UCS2 в php?

2 ответа

Решение

mb_convert_encoding($str, 'UCS-2', 'auto') корректно работает для преобразования строки, но вам придется проделать дополнительную работу, чтобы получить правильный вывод в браузере.

Вам нужно будет изменить набор символов вашего вывода, чтобы он соответствовал UCS-2, чтобы иметь возможность использовать echo для вывода его на страницу. Также вам может понадобиться установить Content-Type через метатег в заголовке.

Я включил три примера в следующие варианты Unicode: UCS-2, UTF-16 и UTF-8; так как не все они работали у меня без настройки в Internet Explorer. Возможно, вам придется хранить ваши файлы PHP в UTF-8, чтобы получить надлежащие результаты. Кроме того, я работаю на англоязычной версии Windows, поэтому не могу ввести вашу арабскую строку в правильной RTL-форме. Извините, если ваша строка искажена здесь. Уверяю вас, что если вы замените его в месте, указанном моими комментариями, вы получите правильный результат. Наконец, у вас могут возникнуть проблемы с просмотром UCS-2 и UTF-16 в Internet Explorer. Кажется, есть некоторые странности, когда вывод перезагружается через кеш. Однако FireFox 3.5.5 работал для всех трех кодировок. Если вы серьезно относитесь к созданию приложения, я настоятельно рекомендую вам использовать UTF-8 вместо UCS-2.

Версия UCS-2

FireFox 3.5.5 (Хорошо, но FireFox говорит, что это UTF-16BE в моем тесте.)
Internet Explorer 7.0 (не в порядке. Не правильно обнаружил / преобразовал арабский.)

<?php
header('Content-Type: text/html; charset=UCS-2');
mb_http_output('UCS-2');
echo mb_convert_encoding('<html><head><meta http-equiv="Content-Type" content="text/html; charset=UCS-2" /></head><body>', 'UCS-2', 'auto');
echo mb_convert_encoding('encoding: ', 'UCS-2', 'auto');
echo mb_convert_encoding(mb_http_output(), 'UCS-2', 'auto');
echo mb_convert_encoding('<br />', 'UCS-2', 'auto');
// NOTE: Replace the string here with your phrase
$strTerm = '!مرحبا عالم';
echo mb_convert_encoding('$strTerm = '.$strTerm.'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('query string: '.$_SERVER['QUERY_STRING'].'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('original hex: '.bin2hex($strTerm).'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('transformed hex: '.bin2hex(mb_convert_encoding($strTerm, 'UCS-2', 'auto')).'<br />', 'UCS-2', 'auto');
echo mb_convert_encoding('</body>', 'UCS-2', 'auto');
?>

Версия UTF-16

FireFox 3.5.5 (100% нормально)
Internet Explorer 7.0 (Ошибка. Может потребоваться указать порядок байтов.)

<?php
header('Content-Type: text/html; charset=UTF-16');
mb_http_output('UTF-16');
echo mb_convert_encoding('<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-16" /></head><body>', 'UTF-16', 'auto');
echo mb_convert_encoding('encoding: ', 'UTF-16', 'auto');
echo mb_convert_encoding(mb_http_output(), 'UTF-16', 'auto');
echo mb_convert_encoding('<br />', 'UTF-16', 'auto');
// NOTE: Replace the string here with your phrase
$strTerm = '!مرحبا عالم';
echo mb_convert_encoding('$strTerm = '.$strTerm.'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('query string: '.$_SERVER['QUERY_STRING'].'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('original hex: '.bin2hex($strTerm).'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('transformed hex: '.bin2hex(mb_convert_encoding($strTerm, 'UTF-16', 'auto')).'<br />', 'UTF-16', 'auto');
echo mb_convert_encoding('</body>', 'UTF-16', 'auto');
?>

UTF-8,

FireFox 3.5.5 (100% нормально)
Internet Explorer 7.0 (100% нормально)

<?php
header('Content-Type: text/html; charset=UTF-8');
mb_http_output('UTF-8');
echo mb_convert_encoding('<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>', 'UTF-8', 'auto');
echo mb_convert_encoding('encoding: ', 'UTF-8', 'auto');
echo mb_convert_encoding(mb_http_output(), 'UTF-8', 'auto');
echo mb_convert_encoding('<br />', 'UTF-8', 'auto');
// NOTE: Replace the string here with your phrase
$strTerm = '!مرحبا عالم';
echo mb_convert_encoding('$strTerm = '.$strTerm.'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('query string: '.$_SERVER['QUERY_STRING'].'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('original hex: '.bin2hex($strTerm).'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('transformed hex: '.bin2hex(mb_convert_encoding($strTerm, 'UTF-8', 'auto')).'<br />', 'UTF-8', 'auto');
echo mb_convert_encoding('</body>', 'UTF-8', 'auto');
?>

Согласно этой веб-странице, модуль многобайтовой строки (mbstring) поддерживает UCS-2. После включения этого модуля вы можете использовать функцию mb_convert_encoding для преобразования строки из одной кодировки в другую.

Цитируем документацию по функции mb_convert_encoding:

string mb_convert_encoding  ( string $str  , string $to_encoding  [, mixed $from_encoding  ] )
Converts the character encoding of string str to to_encoding from optionally from_encoding . 
Другие вопросы по тегам