Как конвертировать шестнадцатеричную строку UTF-16 в UTF-8 в PHP? - PullRequest
3 голосов
/ 03 августа 2009

У меня есть следующий вывод из strace, и я хочу преобразовать его в UTF-8 с помощью PHP:

R\00f6dhakev\00e4gen 4
R\00e4ntm\00e4starv\00e4gen 24
K\00d8BENHAVN

Вышеупомянутые строки - UTF 16 HEX, я думаю.

Ответы [ 2 ]

6 голосов
/ 03 августа 2009

Обнаружено, что работает следующая функция:

function utf8_urldecode($str) {

  $str = str_replace("\\00", "%u00", $str);

  $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));

  return html_entity_decode($str,null,'UTF-8');

}

Некоторые детали из http://us2.php.net/manual/en/function.urldecode.php

0 голосов
/ 09 августа 2009

Попробуйте это:

function masked_utf16_to_utf8($str) {
    $str = preg_replace_callback('/\\\\([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/', create_function('$match', 'return mb_convert_encoding(chr(hexdec("$match[1]")).chr(hexdec("$match[2]")), "UTF-8", "UTF-16");');
    return $str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...