php json decode кириллица utf 8

Кириллица в json_encode

Примечание: не используя второй параметр json_encode и mb-функции.

7 ответов 7

В PHP начиная с версии 5.4.0 появился флаг JSON_UNESCAPED_UNICODE и все стало намного проще:

Пришлось писать свою функцию. Надеюсь, не сильно накосячил?

в начале файла добавь

Указывать Content-Type свой, по ситуации

Предположу, что данные идут с базы данных. В таком случае при подключении к базе данных необходимо указать кодировку подключения — UTF-8.

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

Вот рекурсивная функция, которая может конвертировать в UTF-8 все строки в массиве и объекте:

Также json_last_error() может быть полезным в отладке json_encode()/json_encode() функций.

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

Всё ещё ищете ответ? Посмотрите другие вопросы с метками json php или задайте свой вопрос.

Связанные

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.17.40238

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

json_encode

Описание

Returns a string containing the JSON representation of value.

Список параметров


Возвращаемые значения

Возвращает данные в формате 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.

Как можно увидеть из ошибки: проблема с кодировкой переданной строки (это не UTF8). Решение проблемы очевидное — привести значение в UTF8

Цифровые значения

Последняя типовая ошибка связана с кодированием числовых значений.

Как известно php не строго типизированный язык и позволяет использовать числа в виде строки, в большинстве случаев это не приводит к ошибкам внутри php приложения. Но так как json очень часто используется для передачи сообщений между приложениями, такой формат записи числа может вызвать проблемы в другом приложении. Желательно использовать флаг JSON_NUMERIC_CHECK:

Уже лучше. Но как видим «3.0» превратилось в 3, что в большинстве случаев будет интерпретировано как int. Используем еще один флаг JSON_PRESERVE_ZERO_FRACTION для корректного преобразования в float:

Прошу также обратить внимание на следующий фрагмент кода, что иллюстрирует ряд возможных проблем с json_encode и числовыми значениями:

Источник

json_encode и кириллица

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

Мальчишки, девчонки, низкий всем поклон! Больше отдыхайте и всё будет отлично!

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

У меня не работает пишет ошибку:

Warning: json_encode() expects parameter 2 to be long

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

эм… я на 99,999 уверен, что у меня utf-8.
на всякий случай перед помещением в массив конвертил так:
iconv(‘cp1251’, ‘utf-8’, ‘значение’);
Действительно, null превратился в последовательность типа u0437u0430 и тд.

То есть снова не могу декодировать. Ещё одна проблема в том, что между encode и decode весь JSON сохраняется в БД и декодируется уже оттуда.

Чувствую, что истина где-то рядом, но туплю 🙁

Или изначально работайте c utf-8, но тогда вам скорее всего придется все скрипты переписать (потому что обычные строковые функции уже не подойдут), или заранее конвертируйте данные.

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

mysql_connect(«localhost», «qwer», «qwer»);
mysql_select_db(«termito»);
mysql_query(‘set names utf8’);
$r = mysql_query(«select * from `company_info` WHERE `id`=».mysql_insert_id());
$r = mysql_fetch_array($r);
$a = json_decode($r[‘info’],true);
echo(($a[‘name’]));

/*на выходе упорно u0437u043du0430u0447u0435u043du0438u0435*/

Источник

JSON в PHP: примеры json_encode, json_decode, работа с кириллицей и utf-8

Давайте разберем, как работает JSON в PHP

Подробную документацию всегда можно найти по этой ссылке:

Кодирование при помощи функции json_encode

Функция работает только с кодировкой UTF-8.

Рассмотрим простой пример:

Результат выполнения кода:

Как видим ассоциативный массив превратился в обычную json строку.

Более сложный пример:

Результат выполнения кода:

Что произошло c кириллицей?

Дело в том, что по умолчанию многобайтовые символы Unicode кодируются как \uXXXX. При раскодировании функцией json_decode они преобразуются в нормальные строки. В некоторых случаях мы можем захотеть избежать этого экранирования, например, чтобы посмотреть как выглядит наш JSON.

Для этого воспользуемся флагом JSON_UNESCAPED_UNICODE:

Получаем такой результат:

Мы может еще в целях изучения кода преобразовать его в более человеческий вид, при помощи дополнительного флага JSON_PRETTY_PRINT

Получаем такой результат:

Мы разобрались, как кодировать наши переменные в формат JSON при помощи json_encode.

Другие предопределенные константы с префиксом JSON_ https://www.php.net/manual/ru/json.constants.php

Декодирование c помощью json_decode

Допустим у нас есть строка в формате JSON. Возьмем ее из предыдущего примера:

Давайте раскодируем ее:

У нас получился результат:

Видим, что это тип переменной stdClass. То есть несмотря на то, что мы изначально кодировали в json обычный ассоциативный массив, в результате декодирования у нас получился объект. Подробнее об этом поведении написано здесь: https://phpstack.ru/php/json_decode-kak-perevesti-rezultat-v-massiv.html

Как нам все таки получить обычный массив? Нужно в json_decode передать вторым параметром true:

Теперь мы получили обычный массив. Таким образом разобрались как работать с функцией json_decode для декодирования строки формата JSON.

Обработка ошибок

В случае ошибки, эти функции просто молча возвращают null.

Мы можем проверить, что нам вернулось null и посмотреть какая произошла ошибка следующим образом:

Иногда нам может быть полезно не молчаливо возвращать null, а выкинуть Exception и обработать его. PHP >7.3 предоставляет нам такую возможность.

Это можно сделать при помощи флага JSON_THROW_ON_ERROR

Теперь результат этого кода JsonException с сообщением Syntax error

Более подробно про обработку ошибок JSON:

Как вывести JSON ответ на ajax запрос

Когда к нашему PHP скрипту обращается например javascript с ajax запросом, для того, чтобы подгрузить на страницу новые данные, то часто возникает необходимость ответить в формате JSON.

Для того, чтобы это сделать, нужно отправить заголовок Content-type:application/json;charset=utf-8 и просто вывести строку с закодированными данными.

Содержимое файла text_json.php

Тем временем в javascript мы можем обратиться к нашему php скрипту таким образом:

Отправка JSON запросов на другой сервер.

Некоторые интернет сервисы принимает запросы в формате JSON. Давайте рассмотрим простой пример как отправить такой запрос.

Источник

Cyrillic characters in PHP’s json_encode

I’m trying to encode Cyrillic UTF-8 array to JSON string using php’s function json_encode. The sample code looks like this:

It works fine but the result of the script is represented as:

which makes 6 characters for each Cyrillic character. Is there a way to get the original characters for key/value pairs instead of encoded ones?

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

8 Answers 8

Can’t you use JSON_UNESCAPED_UNICODE constant here?

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

I found this in the code of Zend framework:

Take a look at the function decodeUnicodeString ( line 474 ):

Not an ideal solution, but did the job for me :o)

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

The use of this solution worked for me with the Latin and the Cyrillic alphabet, with PHP 5.5

php json decode кириллица utf 8. Смотреть фото php json decode кириллица utf 8. Смотреть картинку php json decode кириллица utf 8. Картинка про php json decode кириллица utf 8. Фото php json decode кириллица utf 8

This is a realy old question, but I don’t think it was answered correctly.

use something like this:

With nasty bypass in JSON.php, rows 298..

I found A completely fair and balanced comparison of php json libraries on Google. It might help you. You might try another library based on the tables here, if possible. There are additional PHP libraries listed at json.org that you can experiment with.

You can use this options:

Not the answer you’re looking for? Browse other questions tagged php utf-8 json or ask your own question.

Linked

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.17.40238

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *