Подтвердить что ты не робот

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

Любой способ вернуть 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":"á"}

4b9b3361

Ответ 1

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

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

Ответ 2

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

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));
}

Ответ 3

Я решил решить эту проблему:

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

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

Ответ 4

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

Ответ 5

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

utf8_encode($string);

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

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