商会资讯

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博连接

一步搞定

搜索
热搜: 活动 交友 discuz
查看: 6841|回复: 0
打印 上一主题 下一主题

php curl后json_decode无法显示的问题

[复制链接]

109

主题

1

好友

3774

积分

管理员

Rank: 9Rank: 9Rank: 9

  • ta_mind
    mb_qb7
    2013-3-19 01:56
  • classn_01: 366 classn_02

    [LV.9]以坛为家II

    跳转到指定楼层
    楼主
    发表于 2017-10-6 01:23:31 |只看该作者 |倒序浏览
    我们都知道,一般我们在php项目中使用json_decode时,不会出现问题。

    如果我们要想在A页面将数据库中的数据用json形式输出,例如:http://1.xxx.com/a.php
    • <span style="font-size:24px;"><?php  
    •     $sql="select * from ad where id=1 limit 1 ";  
    •     $query=mysql_query($sql);  
    •     $row=mysql_fetch_array($query);  
    •     $str=json_encode($row);  
    •     echo $str;  
    • ?></span>  


    结果如图:显示了正确的json数据。



    然后我们在b.php中可以使用 1.curl方法;2.使用file_get_contents方法首先测试curl

    • <span style="font-size:24px;"><?php         
    •                 $url="http://1.xxx.com/a.php";  
    •         $ch = curl_init();  
    • <span style="white-space:pre">        </span>curl_setopt($ch, CURLOPT_URL, $url);  
    • <span style="white-space:pre">        </span>curl_setopt($ch, CURLOPT_HEADER, 0);  
    • <span style="white-space:pre">        </span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    • <span style="white-space:pre">        </span>$info=curl_exec($ch);  
    • <span style="white-space:pre">        </span>curl_close($ch);  
    • <span style="white-space:pre">        </span>echo  "抓取的内容:".$info;  
    • <span style="white-space:pre">        </span>echo "<br/>下面是json_decode处理后显示的:<br/>";  
    • <span style="white-space:pre">        </span>$s=json_decode($info,true);  
    • <span style="white-space:pre">        </span>echo "<pre>";  
    • <span style="white-space:pre">        </span>print_r($s);  
    • ?></span>  


    我们会发现,出现的了故障:

    竟然json_decode后无法显示!!!这是为何?

    找了一天的原因,有猿友告诉我,是因为一个bom,导致json_decode无法运行,得到的结果是null,因此提供了一个方案。

    • <?php  
    •         $url="http://1.xxx.com/a.php";  
    •         $ch = curl_init();  
    •         curl_setopt($ch, CURLOPT_URL, $url);  
    •         curl_setopt($ch, CURLOPT_HEADER, 0);  
    •         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    •         $info=curl_exec($ch);  
    •         curl_close($ch);  
    •         echo  "抓取的内容:".$info;  
    •         echo "<br/>下面是json_decode处理后显示的:<br/>";  
    •         if(preg_match('/^\xEF\xBB\xBF/',$info))  
    •         {  
    •             $info = substr($info,3);  
    •         }  
    •         $info = json_decode(trim($info),true);  
    •         echo "<pre>";  
    •         print_r($info);  
    • ?>  


    到此,问题已经得到解决。。。主要的问题可能是由于数据库内容输出时显示的是带bom格式!因此需要处理下。





    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    分享分享0 收藏收藏0 转发到微博
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    回顶部