Как исправить проблему отладки json_decode ()? - PullRequest
0 голосов
/ 18 февраля 2019

Добрый день.Попытка разобрать текст из тега «script» и преобразовать его в «JSON».Таким образом, переменная $ arSlider отлично конвертируется в json, но $ arOffers не конвертируется, а выводится строка.Есть комментарии в коде.Что я делаю не так?

Пример значения $arOffers = {"1441":{"ARTIKUL":"01001","PROPS":[{"VALUE":"Клинок - Полированный","NAME":"Покрытие\\цвет клинка "},{"VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]},"1442":{"ARTIKUL":"01003","PROPS":[{"VALUE":"Клинок - Стоунвош черный","NAME":"Покрытие\\цвет клинка "},{"VALUE":"Рукоять - Эластрон","NAME":"Рукоятка"},{"VALUE":"Чехол - Натуральная кожа со вставкой из АБС пластика","NAME":"Чехол"}]}}

include('/inc/simple_html_dom.php');
$url = 'Already to nothing, the problem is solved!';

$html = file_get_html($url);
foreach ($html->find('script') as $el) {
    if (stristr($el->outertext, "arSlider") !== false) {
        $script = str_replace("'", '"', trim(stristr($el->outertext, "arSlider")));
        $script = explode("     arOffers = ", $script);
        $arSlider = str_replace("arSlider = ", "", $script[0]);
        $arSlider = str_replace(";", "", $arSlider);
        $arOffers = str_replace("; ", "", $script[1]);
        $arOffers = str_replace("</script>", "", $arOffers); //Add

        print_r(json_decode($arSlider));
        print_r(json_decode($arOffers));
        //It's working! )))
    }
}

ОБНОВЛЕНИЕ

Проблема показала мнеvar_dump(json_encode($ arOffers)); В строке не показывался закрывающий тег </script> Добавлена ​​замена и все заработало!)))

1 Ответ

0 голосов
/ 18 февраля 2019

Если вывод с "Покрытие\\цвет клинка " является строковым представлением $ arOffers, тогда проблема в "Покрытие\\цвет клинка" (дважды в этой строке).

\ - это escape-символ как в PHP, так и в json.

Я не знаю, откуда берется содержимое $ arrOffers, но попробуйте:

$arOffers = str_replace('\\', '\\\\', $arOffers);, а затем json_decode:

php > $a = '{"a": "Покрытие\\цвет клинка"}';
php > var_dump($a); // string(47) "{"a": "Покрытие\цвет клинка"}"
php > var_dump(json_decode($a)); // NULL
php > var_dump(json_last_error_msg()); // string(12) "Syntax error"                                                                                                              
php > $a = str_replace('\\', '\\\\', $a);
php > var_dump($a); // string(48) "{"a": "Покрытие\\цвет клинка"}"
php > var_dump(json_decode($a));
object(stdClass)#4 (1) {
  ["a"]=>
  string(38) "Покрытие\цвет клинка"
}
php > var_dump(json_last_error_msg()); // string(8) "No error"

См. Этот ответ https://stackoverflow.com/a/32057601/5537425 для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...