JavaScript: конвертация \uXXXX в текст

При взаимодействиии php с js я часто использую json. Формат хорош, но иногда с ним возникают проблемы при использовании русских символов, например, php-функция json_encode преобразует их к виду \uXXXX.

Сам php не предоставляет функций по конвертации текста к удобочитаемому виду, а на javascript это вполне осуществимо с помощью регулярных выражений и экзотической функции fromCharCode

  1. str = str.replace(/\\u([0-9a-f]{4})/g, function($0, $1)
  2. {
  3. return String.fromCharCode(parseInt("0x" + $1));
  4. });

Читайте в блоге

Передача параметра в функцию, вызываемую с помощью setTimeout
TinyURL. Шаг 5. Последние штрихи и запуск
JavaScript Property Tree. Реализация дерева свойств на JavaScript

Метки: php regexp js

Комментарии:

Unknown @ 08.11.2012 23:20


<?

// Для старых версий PHP 5.3 и ниже:
function utf8_unescape($source){

return preg_replace('/\\\u([0-9A-F]{4})/sei', 'iconv("utf-16", "utf-8", hex2str("$1"))', $source);
}

// Вспомогательная функция:
function hex2str($hex) {

$r = '';
for ($i = 0; $i < strlen($hex) - 1; $i += 2)
$r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
return $r;
}

// Пример работы:
echo utf8_unescape("\u041f\u0440\u0438\u0432\u0435\u0442");


?>
Владимир Рыбаков @ 09.11.2012 09:40

Спасибо. В следующий раз буду знать, как решить этот вопрос на стороне сервера.

Хотя все чаще я ловлю себя на мысли, что писать на javascript мне нравится куда больше чем на php. Все больше кода переносится на клиентскую сторону.
Unknown @ 09.11.2012 12:53

Более простая реализация на php:
<?
$json = preg_replace_callback('/\\\u(\w\w\w\w)/',
function($matches){
return '&#'.hexdec($matches[1]).';';
}
, json_encode($array));
?>

Войдите на сайт, чтобы оставить комментарий