Любой способ вернуть PHP `json_encode` с кодировкой UTF-8, а не Unicode? - PullRequest
42 голосов
/ 21 июля 2011

Любой способ вернуть PHP json_encode с кодировкой UTF-8, а не Unicode?

$arr=array('a'=>'á');
echo json_encode($arr);

mb_internal_encoding('UTF-8'); и $arr=array_map('utf8_encode',$arr); не исправляет это.

Результат: {"a":"\u00e1"}

Ожидаемый результат: {"a":"á"}

Ответы [ 5 ]

77 голосов
/ 21 июля 2011

{"a":"\u00e1"} и {"a":"á"} - это разные способы написания одного и того же документа JSON;JSON-декодер будет декодировать escape-кодировку Unicode.

В php 5.4+, php json_encode имеет опцию JSON_UNESCAPED_UNICODE для простого вывода.В более старых версиях php вы можете развернуть свой собственный кодер JSON, который не кодирует символы, отличные от ASCII, или использовать кодировщик Pear's JSON и удалить строки с 349 по 433.

31 голосов
/ 03 июня 2013

Эта функция найдена здесь , у меня отлично работает

function jsonRemoveUnicodeSequences($struct) {
   return preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
}
27 голосов
/ 20 ноября 2012

Я решил свою проблему следующим образом:

  • Файл .php кодируется в ANSI. В этом файле находится функция для создания файла .json.
  • Я использую json_encode($array, JSON_UNESCAPED_UNICODE) для кодирования данных;

В результате получается файл .json, закодированный в ANSI как UTF-8.

7 голосов
/ 06 августа 2015

Используйте JSON_UNESCAPED_UNICODE внутри json_encode(), если ваша версия php> = 5.4.

0 голосов
/ 28 июля 2015

просто используйте это,

utf8_encode($string);

вы должны заменить $arr на $string.

Я думаю, что это будет работать ... попробуйте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...