Задать вопрос

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

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

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

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

Как же так?
  • Вопрос задан
  • 4668 просмотров
Подписаться 5 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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-данных заведомо совпадает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽