【发布时间】:2016-02-23 16:47:52
【问题描述】:
我尝试解析此页面:http://fr.hearthhead.com/cards 以获取 hearthstoneCards JS 变量。 所以我做了这样的事情:
$url = 'http://fr.hearthhead.com/cards';
$content = file_get_contents($url);
preg_match('#var hearthstoneCards = (.*)}]\;#Us', $content, $out);
$out = $out[1].'}]';
$tab_id_card = json_decode($out,true);
我尝试了我能找到的所有技巧(修剪、stripslashes、预置 BOM 和其他东西,在 json_decode 和许多其他东西上放置标志),但我没有得到这个工作。
如果我对 $out 变量进行 file_put_contents 并与真实源进行比较,则它是相同的(相同的长度)。如果我将字符串放在 JS 控制台上,我会得到数据。但是 PHP 不想解析这个 var :(
有人有想法吗? :)
【问题讨论】:
-
我这里没有
JSON_ERROR_SYNTAX,json_decode()只返回NULL。您确定收到此错误吗? -
通过检查 json_last_error() 导致它返回 NULL,感谢您的测试! :)
-
并非所有属性名称都用双引号括起来,例如
{ ...., popularity:2 }。虽然在 javascript 中有效,但它不在 JSON 中,因此会出现解析错误。$out = str_replace('popularity:', '"popularity":', $out);目前将是一个不稳定的快速修复...... -
何没有看到@VolkerK 所以现在我唯一的方法是构建一个正则表达式来转换它,也许它甚至不可能,这很可悲:-/
-
该死的,我刚找到一样的!不过我会给你写一个很好的答案:)
标签: javascript php json regex