Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

Проблемы с json_decode

Имеется следующий json объект:
{ "ИД": "0f126618-6606-11e7-b4c8-005056c00008", "НоменклатураИД": "af0412c1-2feb-11e7-8c78-005056c00008", "Наименование": "1712 Миа", "ДатаИзменения": "0001-01-01T00:00:00", "Описание": "", "Meta_title": "", "Meta_description": "", "Meta_keyword": "", "Теги": "", "ТканьРегион": "1712 Миа", "СайтАртикул": "1712", "СайтСтиль": "Жаккардовый", "СайтАкция": "Нет", "СайтПоказыватьВМагазине": "Да" }
Функция json_decode выводит NULL при попытке вардампа Но при этом вот такой json объект она нормально декодирует:
{ "ИД": "8574a44b-2b1a-11e7-8c78-005056c00008", "Наименование": "КПБ \"Дуэт\" [Бамбук-жаккард)", "НаименованиеПолное": "КПБ \"Дуэт\" [Бамбук-жаккард)", "Артикул": "360/0034295", "ЕдиницаИзмеренияКод": "796", "ЕдиницаИзмеренияНаименование": "шт", "ВестиУчетПоХарактеристикам": true }
В чем может быть проблема?


Ответ

Вам присылают метку BOM - byte order mark. Конкретно EFBBBF характерна для UTF8.
Но json_decode не ожидает такой метки и потому считает документ невалидным. Метку можно безопасно удалять:
if (substr_compare($json, "\xEF\xBB\xBF", 0) > 0) { $json = substr($json, 3); }
Вообще от этот метки часто проблемы встречаются. Нередко стандарты кодирования (PSR стандарты PHP в том числе) требуют не использовать эту метку.

Комментариев нет:

Отправить комментарий