- Кириллица в json_encode
- 7 ответов 7
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками json php или задайте свой вопрос.
- Связанные
- Похожие
- Подписаться на ленту
- Php json windows 1251
- json_encode
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Проблемы с которыми сталкиваются программисты
- json_encode для windows-1251
- Сложности с кодировкой кириллицы и JSON
- Решение
Кириллица в json_encode
Функция json_encode кириллицу utf-8 кодирует в виде \u. . Как её заставить кодировать символы «как есть»?
Примечание: не используя второй параметр json_encode и mb-функции.
7 ответов 7
В PHP начиная с версии 5.4.0 появился флаг JSON_UNESCAPED_UNICODE и все стало намного проще:
Пришлось писать свою функцию. Надеюсь, не сильно накосячил?
в начале файла добавь
Указывать Content-Type свой, по ситуации
Предположу, что данные идут с базы данных. В таком случае при подключении к базе данных необходимо указать кодировку подключения — UTF-8.
Искал как решить проблему, в итоге заработало когда добавил к json_encode флаг — JSON_UNESCAPED_UNICODE и сменил кодировку при выводе
- Improved JSON extension: . Added new json_encode() option JSON_UNESCAPED_UNICODE. FR #53946. (Alexander, Gwynne)
Вот рекурсивная функция, которая может конвертировать в UTF-8 все строки в массиве и объекте:
Также json_last_error() может быть полезным в отладке json_encode()/json_encode() функций.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками json php или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.4.16.39093
Php json windows 1251
с ajax-ом работаю через json, поэтому в php активно использую json_encode() функции.
Проблема — при вызове json_encode() из php файла (в кодировке windows-1251) — на выходе apache русский текст вырезан, пустые строки вместо.
Глянул в ман, там коммент насчет русских символов. Т.е. получается что если передавать туда не UTF, а киррилицу например — корректно работать она не будет и поэтому народ предлагает использовать самописную функцию?
Кто сталкивался — как решал проблему? UTF или самописные функции?
| От: | Cyberax |
Дата: | 04.09.08 15:10 | |
Оценка: |
Здравствуйте, insighter, Вы писали:
I>Глянул в ман, там коммент насчет русских символов. Т.е. получается что если передавать туда не UTF, а киррилицу например — корректно работать она не будет и поэтому народ предлагает использовать самописную функцию?
Что значит «передать кириллицу»??
UTF-8 прекрасно подходит для кодирования кириллицы.
| От: | insighter | http://upwork.com/freelancers/ |
016e5772d90cce5fd1
| От: | DeZhavi |
Дата: | 04.09.08 22:56 | |
Оценка: |
Здравствуйте, insighter, Вы писали:
I>Кто сталкивался — как решал проблему? UTF или самописные функции?
не совсем понял проблеммы?!
При POST — GET запросах приходит на сервер не та кодировка?
Если так столкнулся с такой проблемой используя библиотеку extJS, но это не было большой проблемой вот я как сделал
function ToWindows1251($n) <
return iconv(«UTF-8″,»windows-1251», $n);
>
может — это и не то, тогда, разъясните подробнее вашу проблему. для меня ))) может я не так понял.
Этот пример из реального проекта с использованием extJS
| От: | insighter | http://upwork.com/freelancers/ |
016e5772d90cce5fd1
| От: | Centaur |
Дата: | 06.09.08 16:59 | |
Оценка: |
Здравствуйте, insighter, Вы писали:
I>с ajax-ом работаю через json, поэтому в php активно использую json_encode() функции.
I>Проблема — при вызове json_encode() из php файла (в кодировке windows-1251) — на выходе apache русский текст вырезан, пустые строки вместо.
Кодировок, отличных от UTF-8, в AJAX-приложении быть Не Должно.
json_encode
json_encode — Конвертация данных в формат JSON
Описание
Returns a string containing the JSON representation of value.
JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.
Список параметров
The value being encoded. Can be any type except a resource .
Возвращаемые значения
Возвращает данные в формате JSON string on success.
Примеры
Пример 1. A json_encode() example
Результат выполнения данного примера:
Пример 2. A json_encode()
Пример 3. Эмулятор json_encode()
Пример 3. Сохранение русских букв(кирилицы) при использовании json_encode()
А вот пример кодирования сервером строки JSON при помощи стандартной функции в php «json_encode()» и добавочной к ней. В результате русские буковки остаются русскими. Начиная с версии PHP 5.4.0. можно воспользоваться стандартныой опцией JSON_UNESCAPED_UNICODE
Исходный объект в кодировке UTF-8.
Проблемы с которыми сталкиваются программисты
Доступ к полям
Проблема заключается в том что json_encode имеет доступ только к публичным полям объекта. Например если у вас есть класс
то результатом выполнения следующего кода будет:
как видно в результирующий json были включены только публичные поля.
Что же делать если нужны все поля?
Для php >= 5.4 достаточно будет реализовать интерфейс JsonSerializable для нашего класса, что подразумевает добавление метода jsonSerialize который будет возвращать структуру представляющую объект для json_encode
Теперь мы можем использовать json_encode как и раньше
Почему не стоит использовать подход с toJson методом?
Многие наверно заметили что подход с созданием метода возвращающего json может быть использован и в версиях php >= 5.4. Так почему же не воспользоваться им? Все дело в том что ваш класс может быть использован как часть иной структуры данных
и результат уже будет совсем другой. Также класс может использоваться другими программистами, для которых такой тип получение json-а с объекта может быть не совсем очевиден.
Что если у меня очень много полей в класcе?
В таком случае можно воспользоваться функцией get_object_vars
А если нужно private-поля, из класса, который нет возможности редактировать?
Может получиться ситуация когда нужно получить private поля (именно private, т.к. доступ к protected полям можно получить через наследование) в json-е. В таком случае необходимо будет воспользоваться рефлексией:
Кодировка текстовых значений
Кириллица и другие знаки в UTF8
Второй тип распространённых проблем с json_encode это проблемы с кодировкой. Часто текстовые значения которые нужно кодировать в json имеют в себе символы в UTF8 (в том числе кириллица) в результате эти символы будут представлены в виде кодов:
Отображение таких символов лечится очень просто — добавлением флага JSON_UNESCAPED_UNICODE вторым аргументом к функции json_encode:
Символы в других кодировках
Функция json_encode воспринимает строковые значения как строки в UTF8, что может вызвать ошибку, если кодировка другая. Рассмотрим маленький кусочек кода (данный пример кода максимально упрощен для демонстрации проблемной ситуации)
На первый взгляд ничего не предвещает проблем, да и что здесь может пойти не так? Я тоже так думал. В подавляющем большинстве случаев все будет работать, и по этой причине поиск проблемы занял у меня несколько больше времени, когда я впервые столкнулся с тем что результатом json_encode было false.
Для воссоздания такой ситуации предположим что p=%EF%F2%E8%F6%E0 (на пример: localhost?=%EF%F2%E8%F6%E0 ). *Переменные в суперглобальных массивах $_GET и $_REQUEST уже декодированы.
Как можно увидеть из ошибки: проблема с кодировкой переданной строки (это не UTF8). Решение проблемы очевидное — привести значение в UTF8
Цифровые значения
Последняя типовая ошибка связана с кодированием числовых значений.
Как известно php не строго типизированный язык и позволяет использовать числа в виде строки, в большинстве случаев это не приводит к ошибкам внутри php приложения. Но так как json очень часто используется для передачи сообщений между приложениями, такой формат записи числа может вызвать проблемы в другом приложении. Желательно использовать флаг JSON_NUMERIC_CHECK:
Уже лучше. Но как видим «3.0» превратилось в 3, что в большинстве случаев будет интерпретировано как int. Используем еще один флаг JSON_PRESERVE_ZERO_FRACTION для корректного преобразования в float:
Прошу также обратить внимание на следующий фрагмент кода, что иллюстрирует ряд возможных проблем с json_encode и числовыми значениями:
json_encode для windows-1251
В общем старая добрая песня как я понимаю но найти хорошего варианта не могу.
Задача вообще состоит в отправке через ajax с сервера в json данных в windows-1251 с русскими символами.
Получается все, кроме одного — я не могу грубо говоря на сервере получить строку json с русским текстом.
Подскажите как быть. Спасибо.
Использование iconv для преобразования из windows-1251
Синтаксис мне подсказали: , . А какой для неё код для 1251?
Windows-1251 и символы Юникода
Есть необходимость добавить поддержку всяких разных символов из юникода для вводимых данных на.
Парсинг из windows-1251 в UTF-8
Здравствуйте! Существует модуль для DLE который парсит тв программу с tv.mail.ru. Кодировка моего.
Не работают кодировки и utf-8 и windows-1251
проблема с кодировками: во всех браузерах весь текст (и с дримвивера и с БД) отображается.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Перевод записей БД MySQL из UTF-8 в Windows-1251
Здравствуйте! Я генерирую документ PDF с помощью FPDF. Этот документ должен содержать таблицу.
Сортировка json_encode
Привет всем! На входе правильно отсортированный массив с помощью ORDER BY по алфавиту. На выходе.
Windows 1251 = > base 64
Всем доброго времени суток!. Вопрос следующий, есть сайт, на котором есть есть форма, в которой в.
Кодирование из utf8 в windows-1251
Допустим есть на входе такая строка : %u0442%u0435%u0441%u0442:test — это текст в юникоде.
Сложности с кодировкой кириллицы и JSON
Как видите кракозябры.
В другом проекте так писал:
JSON — раскодирование кириллицы
Здравствуйте! разбираюсь с JSON взял код с сайта, все отрабатывает, но выводит кириллицу в виде.
Сложности с кодировкой в cheerio Node JS
Здравствуйте! Возникла проблема с кодировкой. На странице откуда берутся данные кодировка.
Прием байтов через сокеты в консоль — проблема с кодировкой кириллицы
Через сокет принимаю массив байтов, потом достаю из них символы и вывожу на консоль. Когда принимаю.
Чтобы этого не было, текст должен иметь кодировку UTF-8
Вот на всякий случай как менять кодировку текста
$text = mb_convert_encoding($text, ‘utf-8’, ‘cp1251’);
или
$text = iconv(‘CP1251’, ‘UTF-8’, $text);
Решение
Тематические курсы и обучение профессиям онлайн Профессия PHP-разработчик (Skillbox) Fullstack-разработчик на PHP (Skillbox) Веб-разработчик с нуля (Нетология) Профессия веб-разработчик (Skillbox) |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Сложности с гибкостью json reader
Добрый вечер, есть код int RKJsonReader::getInt(const char* node, const int iterator, const.
JSON не могу разобраться с кодировкой
Добрый день, отдаю со страницы ajax.html вот такой json .
Ошибки с кодировкой при получении json c сайта
Всем привет. При получении json ответа отображается неправильная кодировка кириллицы. ,»type».
Уже сутки мучаюсь с кодировкой ответа json
Люди добрые, помогите. не могу понять в чем дело, уже сутки бьюсь проблемой. Суть в том, что.