php 如何将 javascript 对象解析为 json

2016-11-19 17:03:42 +08:00
 mingyun

在 sf 上看到一个问题,$str 是从网页获取的字符串,以下为代码,大家可以在线测试,地址 https://tools.vaptu.com/online/shared/1644b15ce95ce0d62de85aa47cd73fdd

$str="<script>
window.shop_config={
        userId: 0,
        shopId: 11576689,
        shopName: \"优尼牙科\",
        cityId: 2,
        power:5,
        shopType:85,
        map:{
            power:5,
        manaScore:0
        },
        licensePics:['http://mss.sankuai.com/v1/mss_bccd2477df9e492ca0baeb67e4eb3491/qualification/8723a20a-a40c-11e3-8fb0-a254baaa25bb?temp_url_sig=c17ff6525cfabce9e5f94b46ca3f9ee5115a1309&temp_url_expires=1479364038',],
    mainCategoryId:182,
     defaultPic:\"http://qcloud.dpfile.com/pc/hhF4nWJIwWw4FXmGBaW39dKYr5NdlHLz5G64Lx3QSTypRKzSBzQnLPwzWURFZUAvtOnd3gXQdDYlAqlaVaAFeZ0rYYyiRo_EhzufqWWjTjs.jpg\"
    }
</script>";

preg_match('#<script>
window.shop_config=([\s\S]*)</script>#',$str,$match);

print_r($match[1]);//匹配出 shop_config 变量

$res=preg_replace('#\s*(.*):\s*(.*),#','"$1":"$2",',$match[1]);//补充双引号,但是 js 对象里有的值已经有双引号了,而且 licensePics 里面是个数组,加双引号没用

print_r(json_decode($res,true));//解释失败了,怎么办?
1661 次点击
所在节点    PHP
1 条回复
SoloCompany
2016-11-19 18:26:13 +08:00
如果不涉及安全问题
用 eval 啊, context.window={}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/321715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX