[英]How to fix json_decode () debugging problem?
美好的一天。 嘗試從“腳本”標簽解析文本並將其轉換為“ 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":"Чехол"}]}}
樣本值 $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! )))
}
}
UPDATE
問題告訴我var_dump(json_encode($ arOffers));
該行未顯示結束標記</script>
添加了replace,並且有效! )))
如果帶有"Покрытие\\\\цвет клинка "
的輸出是$ arOffers的字符串表示形式,則問題出在"Покрытие\\\\цвет клинка"
(該字符串的兩倍)中。
\\是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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.