Функция PHP json_encode преобразует строки UTF-8 в шестнадцатеричные объекты: почему и как это решить
Функция PHP json_encode может кодировать переменные PHP в JSON (нотация объектов JavaScript). Однако при работе с символами Юникода в кодировке UTF-8 функция по умолчанию может преобразовать их в шестнадцатеричные объекты. Это связано с тем, что JSON изначально не поддерживает символы UTF-8, которые представляют собой многобайтовые символы, представляющие символы, отличные от ASCII.
Почему PHP преобразует строки UTF-8 в шестнадцатеричные объекты?
Функция json_encode PHP использует спецификацию JSON, которая предписывает, что символы Юникода, не представленные как символы ASCII, должны быть закодированы с использованием шестнадцатеричных escape-последовательностей. Это обеспечивает совместимость со старыми приложениями и устройствами, которые могут не поддерживать UTF-8.
Решение проблемы преобразования
Чтобы решить эту проблему и избежать преобразования UTF-8 строк в шестнадцатеричные объекты, в PHP появилась опция JSON_UNESCAPED_UNICODE в версии 5.4.0. Этот параметр предписывает json_encode использовать кодовые точки Unicode вместо шестнадцатеричных escape-последовательностей для символов, отличных от ASCII.
Пример
Предположим, у вас есть следующий PHP-скрипт:
Этот код выведет следующую строку JSON, где символы кириллицы закодированы в шестнадцатеричном формате:
"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."
Чтобы напрямую вывести символы UTF-8, вы можете использовать параметр JSON_UNESCAPED_UNICODE:
Это создаст следующую строку JSON, в которой символы кириллицы представлены с использованием их кодовых точек Unicode:
"База данни грешка."
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3