Кириллические символы в json_encode PHP

Я пытаюсь кодировать кириллический массив UTF-8 в строку JSON, используя функцию php json_encode. Пример кода выглядит следующим образом:

<?php $arr = array( 'едно' => 'първи', 'две' => 'втори' ); $str = json_encode($arr); echo $str; ?> 

Он отлично работает, но результат скрипта представлен как:

 {"\u0435\u0434\u043d\u043e":"\u043f\u044a\u0440\u0432\u0438","\u0434\u0432\u0435":"\u0432\u0442\u043e\u0440\u0438"} 

который составляет 6 символов для каждого кириллического персонажа. Есть ли способ получить исходные символы для пар ключ / значение вместо кодированных?

Я нашел это в коде Zend framework:

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php

Взгляните на функцию decodeUnicodeString (строка 474):

  /** * Decode Unicode Characters from \u0000 ASCII syntax. * * This algorithm was originally developed for the * Solar Framework by Paul M. Jones * * @link http://solarphp.com/ * @link http://svn.solarphp.com/core/trunk/Solar/Json.php * @param string $value * @return string */ public static function decodeUnicodeString($chrs) 

Это статично, и вы можете легко извлечь его – просто замените строку:

 490: $utf8 .= self::_utf162utf8($utf16); 

с:

 490: $utf8 .= mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); 

Не идеальное решение, но сделал для меня работу: o)

Вы не можете использовать константу JSON_UNESCAPED_UNICODE здесь?

Похоже, что встроенный в json_encode PHP работает только с UTF-8, и никаких других колоколов и свистков для настройки того, как он работает в отношении кодирования.

Я нашел абсолютно справедливое и сбалансированное сравнение php json-библиотек в Google. Это может помочь вам. Если возможно, вы можете попробовать другую библиотеку на основе таблиц. На json.org есть дополнительные библиотеки PHP, с которыми вы можете экспериментировать.

Он работал с http://pear.php.net/pepr/pepr-proposal-show.php?id=198

С неприятным обходом в JSON.php, строки 298 ..

 $char = pack('C*', $ord_var_c, ord($var{$c + 1})); $c += 1; //$utf16 = $this->utf82utf16($char); //$ascii .= sprintf('\u%04s', bin2hex($utf16)); $ascii .= $char; 

Благодаря!

У меня была та же проблема для турецких … действительно, нам не нужно делать ничего, что браузеры автоматически преобразуют их в блоки кода JS. Таким образом, самый простой способ получить их декодирование – это получить их через javascript. (Ajax и т. Д.)

Json кодируется для символов без ascii?

 $str = json_encode($arr, JSON_UNESCAPED_UNICODE); 

Использование этого решения работало для меня с латинского и кириллического алфавита, с PHP 5.5

Это очень старый вопрос, но я не думаю, что на него ответили правильно.

используйте что-то вроде этого:

 print json_encode($array, JSON_UNESCAPED_UNICODE);