json_encode в PHP: разрастание данных

В PHP есть встроенные средства преобразования данных в json. Рассмотрим пример:

echo json_encode(iconv('cp1251', 'utf-8', 'тест'));

Он вернет "\ u0442\ u0435\ u0441\ u0442" (пробелы дабы не искушать парсер) — это 26 байтов, а вовсе не 10, как хотелось бы.

Как же так?
  • Вопрос задан
  • 4652 просмотра
Пригласить эксперта
Ответы на вопрос 4
Эммм. В чем проблема, господа? Уверены в кодировке — вперед)

php -r 'var_dump(json_encode(«тест»));'
string(26) ""\u0442\u0435\u0441\u0442""

php -r 'var_dump(json_encode(«тест», JSON_UNESCAPED_UNICODE));'
string(10) "«тест»"
Ответ написан
@Nc_Soft
Было уже в q& про это. Что делать? Смириться и включить gzip.
Ответ написан
kashey
@kashey
Программирую большую половину жизни
Использовать самопальный json::encode — там кода на 20 строк.
И даже кормить его cp1251 без конверта.
У таких решение только один минус — работают в сотни раз встроенного решения.
Ответ написан
Комментировать
MTonly
@MTonly
Веб-разработчик с 2002 года
Такое кодирование нелатинских символов является, так сказать, единственным надёжным способом гарантированно точного представления таких символов вне зависимости от используемой на веб-странице кодировки. Но жаль, конечно, что в json_encode() нет параметра, позволяющего отключить такое кодирование, если кодировка страницы и JSON-данных заведомо совпадает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы