Любой способ вернуть PHP "кодирование json" с помощью кодирования UTF-8, а не Юникода?


Есть ли способ вернуть PHP json_encode с кодировкой UTF-8, а не в Юникоде?

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

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

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

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

Author: hakre, 2011-07-21

5 answers

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

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

 66
Author: phihag, 2012-05-31 14:51:26

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

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));
}
 29
Author: antoniom, 2013-06-03 14:07:06

Я решил свою проблему, сделав это:

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

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

 21
Author: Sheyla Fernandes, 2012-11-20 17:58:53

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

 7
Author: Lakin Mohapatra, 2016-01-23 05:18:31

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

utf8_encode($string);

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

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

 -4
Author: Ashish Tikarye, 2015-07-28 07:51:33