php小偷解析http获取的json数据总是空白NULL
标题搞的都不知道怎么表达比较清楚了;使用PHP写了一个小偷去抓取别人网站json数据,数据抓取回来后很是奇怪,只要使用json_decode进行解析就直接为空NULL,而又直接把结果字符串复制出来手动创建一个变量却正常,在前端js也能解析,借助网上json数据监测也是正常的json数据,没错啊?搞了半天不得其解。
在测试的过程中使用 json_last_error() 函数打印一下错误,页面显示4,根据官方解释也就是语法错误。归根结底还是采集过来的数据问题,那么就只能从这里下手了。万能的搜索引擎还是有点靠谱,在翻阅了N多文章后,对比我获取来的数据信息,可能就是编码问题了(json不支持gbk编码,也就是说数据的编码错误)最终我的方法得以解决,直接上代码:
1 2 3 |
$result = @iconv("UTF-8","GBK//IGNORE",$result); $result = @iconv("GBK","UTF-8//IGNORE",$result); print_r(json_decode($result, true)); |
由于我所采集的数据中有特殊字符之类的信息,可能是这个方法导致;
另外附上其它2中方法,下面的两种方法并未实测,效果未知:
1 2 3 |
$result = trim($result, "\xEF\xBB\xBF"); print_r(json_decode($result, true)); exit; |
第三种:
1 2 3 4 |
if (substr($return, 0,3) == pack("CCC",0xef,0xbb,0xbf)) { $return = substr($return, 3); } $data = json_decode($return,true); |
如果上面的方式还是不行,再试试使用htmlspecialchars_decode进行转义后再使用json_decode进行解析:
1 2 |
$content = htmlspecialchars_decode($content); $content = json_decode($content,true); |
这样一般都可以解决问题了,以后遇到问题再进行更新此文章!