Php json windows 1251

Кириллица в 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 Дата: 04.09.08 21:43 Оценка:

От: 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 Дата: 05.09.08 07:48 Оценка:

От: 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
Люди добрые, помогите. не могу понять в чем дело, уже сутки бьюсь проблемой. Суть в том, что.

Читайте также:  Conan exiles linux dedicated server
Оцените статью