Товарищи, помогите плиз разобраться. Получаю от сервера следующий ответ (это то что я вижу в браузере!): Код (Text): {"value":"Беспроводные ушные мониторы (радионаушники) LD Systems MEI One 3. Прибор абсолютно новый. В коробке и заводской упаковке. Из Европы.\n\nБеспроводная система мониторинга LD Systems MEI ONE 3 - представляемая система от LD Systems расширяет диапазон пользовательских систем с доступными ценами. Теперь, благодаря этой аудио системе, абсолютно каждый может позволить себе комфорт беспроводного мониторинга. MEI ONE 3 доступен в 3 различных вариантах фиксированных частот, которые могут работать одновременно и без помех. Так же можно использовать один передатчик и неограниченное количество приемников, при этом все будут слышать тоже самое, с одинаково качественным звучанием. \n\nОсновные характеристики:\n - Стерео\/моно: Моно или стерео;\n - Управляемые частоты: Да;\n - Конструкция передатчика: 9,5\"\/1 рэковое пространство;\n - Индикатор передатчика: Индикатор из последовательных LED-светодиодов;\n - Соединения передатчика: 2 x комбинированных \"Нейтрик\"; 6,3 мм выход на наушники;\n - Индикатор при+C2ёмника: Нет;\n - Соединения приёмника: Мини-джек, стерео;\n - Вкю лимитер: Да.\n\nВ наличии несколько штук, все абсолютно новое, в коробках и заводской упаковке из Европы.\n----------------------------------------\nРаботаем с 2011 года. Огромное количество отзывов на сайтах DDmart, Digital-Drums, группе вконтакте: \/ddrums и на музыкальных форумах.\nЦены ниже чем в магазинах города. Гарантия 1 год.\nДоставка в любой регион России транспортными компаниями, самовывоз или курьерская доставка по Санкт-Петербургу и области.","error":null,"hasWysiwyg":false,"vasTypeId":26} Пытаюсь скормить это json_decode(), но он возвращает NULL json_last_error() => 4 (т.е. ошибка в структуре json). Делаю сохранение в файл, того что получил с сервера, в файле оказывается следующее (тестовый файл прикрепил к посту). mb_detect_encoding() говорит что это ASCII. Предпологаю, что проблема с кодировкой пытаюсь всеми известными мне способами сконвертировать это UTF-8: mb_convert_encoding, utf8_encode, iconv - все одно и тоже: json_decode не работает. При этом если скопировать содеожимое первого спойлера в какой-нибудь сервис типа: http://freeonlinetools24.com/json-decode - то все прекрасно декодируется. Подскажите плиз куда копать!
Весь код наверное сложно всунуть сюда. Куски: 1. Логинюсь в свой кабинет на авито и дергаю страницу с редактированием своего объявления через функцию CURL: PHP: $ret = $cm->URIRequest('https://www.avito.ru/items/edit/'.$out['avito_id'], 'GET', FALSE, FALSE, FALSE, 'http://www.avito.ru'); получаю много HTML в том числе следующий кусок: Код (Text): <div class="item-edit-description js-item-edit-description" data-params='{"value":"Беспроводные ушные мониторы (радионаушники) LD Systems MEI One 3. Прибор абсолютно новый. В коробке и заводской упаковке. Из Европы.\n\nБеспроводная система мониторинга LD Systems MEI ONE 3 - представляемая система от LD Systems расширяет диапазон пользовательских систем с доступными ценами. Теперь, благодаря этой аудио системе, абсолютно каждый может позволить себе комфорт беспроводного мониторинга. MEI ONE 3 доступен в 3 различных вариантах фиксированных частот, которые могут работать одновременно и без помех. Так же можно использовать один передатчик и неограниченное количество приемников, при этом все будут слышать тоже самое, с одинаково качественным звучанием. \n\nОсновные характеристики:\n - Стерео\/моно: Моно или стерео;\n - Управляемые частоты: Да;\n - Конструкция передатчика: 9,5\"\/1 рэковое пространство;\n - Индикатор передатчика: Индикатор из последовательных LED-светодиодов;\n - Соединения передатчика: 2 x комбинированных \"Нейтрик\"; 6,3 мм выход на наушники;\n - Индикатор при+C2ёмника: Нет;\n - Соединения приёмника: Мини-джек, стерео;\n - Вкю лимитер: Да.\n\nВ наличии несколько штук, все абсолютно новое, в коробках и заводской упаковке из Европы.\n----------------------------------------\nРаботаем с 2011 года. Огромное количество отзывов на сайтах DDmart, Digital-Drums, группе вконтакте: \/ddrums и на музыкальных форумах.\nЦены ниже чем в магазинах города. Гарантия 1 год.\nДоставка в любой регион России транспортными компаниями, самовывоз или курьерская доставка по Санкт-Петербургу и области.","error":null,"hasWysiwyg":false,"vasTypeId":26}'></div> 2. Загружаю это дело в simplehtmldom: PHP: $html_adv = str_get_html($ret, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=false, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT); 3. Парсим, дабы вытащить текст объявления: PHP: $item_description = $html_adv->find('div[class="item-edit-description js-item-edit-description"]',0); $out['description_json'] = trim($item_description->{'data-params'}); 4. Пытаемся сконвертить в UTF-8 PHP: $out['description_json'] = utf8_encode($out['description_json']); 5. Получаем вот такой вар_дамп var_dump($out['description_json']): Код (Text): string(10598) "{"value":"Беспроводные ушные мониторы (радионаушники) LD Systems MEI One 3. Прибор абсолютно новый. В коробке и заводской упаковке. Из Европы.\n\nБеспроводная система мониторинга LD Systems MEI ONE 3 - представляемая система от LD Systems расширяет диапазон пользовательских систем с доступными ценами. Теперь, благодаря этой аудио системе, абсолютно каждый может позволить себе комфорт беспроводного мониторинга. MEI ONE 3 доступен в 3 различных вариантах фиксированных частот, которые могут работать одновременно и без помех. Так же можно использовать один передатчик и неограниченное количество приемников, при этом все будут слышать тоже самое, с одинаково качественным звучанием. \n\nОсновные характеристики:\n - Стерео\/моно: Моно или стерео;\n - Управляемые частоты: Да;\n - Конструкция передатчика: 9,5\"\/1 рэковое пространство;\n - Индикатор передатчика: Индикатор из последовательных LED-светодиодов;\n - Соединения передатчика: 2 x комбинированных \"Нейтрик\"; 6,3 мм выход на наушники;\n - Индикатор при+C2ёмника: Нет;\n - Соединения приёмника: Мини-джек, стерео;\n - Вкю лимитер: Да.\n\nВ наличии несколько штук, все абсолютно новое, в коробках и заводской упаковке из Европы.\n----------------------------------------\nРаботаем с 2011 года. Огромное количество отзывов на сайтах DDmart, Digital-Drums, группе вконтакте: \/ddrums и на музыкальных форумах.\nЦены ниже чем в магазинах города. Гарантия 1 год.\nДоставка в любой регион России транспортными компаниями, самовывоз или курьерская доставка по Санкт-Петербургу и области.","error":null,"hasWysiwyg":false,"vasTypeId":26}" Вроде с виду все прекрасно, но почему-то json_decode($out['description_json']); - нам ничего не возвращает.. :-(
Так всеравно ругается. Заменил на: PHP: $search = Array('\n', '\/', '\"'); $replace = Array("\n", '', ''); $out['description_json'] = str_replace($search, $replace, $out['description_json']); Но всеравно не работает. В итоге после замены: var_dump($out['description_json']): Код (Text): string(10598) "{"value":"Беспроводные ушные мониторы (радионаушники) LD Systems MEI One 3. Прибор абсолютно новый. В коробке и заводской упаковке. Из Европы.\n\nБеспроводная система мониторинга LD Systems MEI ONE 3 - представляемая система от LD Systems расширяет диапазон пользовательских систем с доступными ценами. Теперь, благодаря этой аудио системе, абсолютно каждый может позволить себе комфорт беспроводного мониторинга. MEI ONE 3 доступен в 3 различных вариантах фиксированных частот, которые могут работать одновременно и без помех. Так же можно использовать один передатчик и неограниченное количество приемников, при этом все будут слышать тоже самое, с одинаково качественным звучанием. \n\nОсновные характеристики:\n - Стерео\/моно: Моно или стерео;\n - Управляемые частоты: Да;\n - Конструкция передатчика: 9,5\"\/1 рэковое пространство;\n - Индикатор передатчика: Индикатор из последовательных LED-светодиодов;\n - Соединения передатчика: 2 x комбинированных \"Нейтрик\"; 6,3 мм выход на наушники;\n - Индикатор при+C2ёмника: Нет;\n - Соединения приёмника: Мини-джек, стерео;\n - Вкю лимитер: Да.\n\nВ наличии несколько штук, все абсолютно новое, в коробках и заводской упаковке из Европы.\n----------------------------------------\nРаботаем с 2011 года. Огромное количество отзывов на сайтах DDmart, Digital-Drums, группе вконтакте: \/ddrums и на музыкальных форумах.\nЦены ниже чем в магазинах города. Гарантия 1 год.\nДоставка в любой регион России транспортными компаниями, самовывоз или курьерская доставка по Санкт-Петербургу и области.","error":null,"hasWysiwyg":false,"vasTypeId":26}" var_dump(json_decode($out['description_json'])): Код (Text): NULL
У меня все еще работает PHP: $a='{"value":"Беспроводные ушные мониторы (радионаушники) LD Systems MEI One 3. Прибор абсолютно новый. В коробке и заводской упаковке. Из Европы.\n\nБеспроводная система мониторинга LD Systems MEI ONE 3 - представляемая система от LD Systems расширяет диапазон пользовательских систем с доступными ценами. Теперь, благодаря этой аудио системе, абсолютно каждый может позволить себе комфорт беспроводного мониторинга. MEI ONE 3 доступен в 3 различных вариантах фиксированных частот, которые могут работать одновременно и без помех. Так же можно использовать один передатчик и неограниченное количество приемников, при этом все будут слышать тоже самое, с одинаково качественным звучанием. \n\nОсновные характеристики:\n - Стерео\/моно: Моно или стерео;\n - Управляемые частоты: Да;\n - Конструкция передатчика: 9,5\"\/1 рэковое пространство;\n - Индикатор передатчика: Индикатор из последовательных LED-светодиодов;\n - Соединения передатчика: 2 x комбинированных \"Нейтрик\"; 6,3 мм выход на наушники;\n - Индикатор при+C2ёмника: Нет;\n - Соединения приёмника: Мини-джек, стерео;\n - Вкю лимитер: Да.\n\nВ наличии несколько штук, все абсолютно новое, в коробках и заводской упаковке из Европы.\n----------------------------------------\nРаботаем с 2011 года. Огромное количество отзывов на сайтах DDmart, Digital-Drums, группе вконтакте: \/ddrums и на музыкальных форумах.\nЦены ниже чем в магазинах города. Гарантия 1 год.\nДоставка в любой регион России транспортными компаниями, самовывоз или курьерская доставка по Санкт-Петербургу и области.","error":null,"hasWysiwyg":false,"vasTypeId":26}'; var_dump(json_decode($a)); exit(); http://sandbox.onlinephpfunctions.com/code/521bb749dafe9d5943bd073196abbf6cd497984f
Вероятно, проблема в кодировке получаемого json. json_decode работает только со строками в кодировке UTF-8 --- Добавлено --- Текущий Json у меня обрабатывается нормально. PHP Version 7.0.15 --- Добавлено --- --- Добавлено --- Попробуй так. Это первый комментарий к документации по функцие json_decode()
2mahmuzar, в UTF-8 пытался перевести всеми возможными функциями - mb_convert_encoding, utf8_encode, iconv - все одно и тоже: json_decode не работает. 2nospiou, у меня так тоже работает, не работает, когда от сервера ответ получаю. Я вот что думаю, что от сервера в реальности-то приходит такой контент (это кусочек): Код (Text): {"value":"Беспроводные ушные мониторы (радионаушники) LD Systems MEI One 3. Прибор абсолютно новый. В коробке и заводской упаковке. Из Ев Может по-этому его и не декодировать? Как это безобразие превратить в нормальный читаемый текст?
Если от сервера приходит этот контент, откуда json в первом посте? Попробуй этот текст пропустить через html_entity_decode
2mahmuzar - ура, заработало! ) Все дело было в этом. А JSON т.к. браузер в var_dump показывал обычный читабильный текст. Очевидно, он конвертирует его на лету. Если бы я не сохранил его в файл, так вообще бы было не понять. Спасибо всем кто помогал, проблема решена!