V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mingyun
V2EX  ›  PHP

php 如何将 javascript 对象解析为 json

  •  
  •   mingyun · 2016-11-19 17:03:42 +08:00 · 1738 次点击
    这是一个创建于 2918 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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));//解释失败了,怎么办?
    
    SoloCompany
        1
    SoloCompany  
       2016-11-19 18:26:13 +08:00 via iPhone
    如果不涉及安全问题
    用 eval 啊, context.window={}
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2843 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:41 · PVG 19:41 · LAX 03:41 · JFK 06:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.