1.   本网站所有源码包解压密码:www.youhutong.com
会员登录  帮助问答

PHP + file_get_contents后得到的JSON数据, json_decode后出现NULL的原因和解决方法

小川 PHP

file_get_contents后得到的JSON数据,json_decode后出现NULL的原因和解决方法:

【分析排错】:

1.json字符串必须以双引号包含,可用:

$str = str_replace("'", '"', $str);

2.json字符串必须是utf8编码,可用 : 

$str = iconv('gbk', 'utf8', $str);

3.不能有多余的逗号 如:[1,2,],用正则替换掉,可用:

preg_replace('/,\s*([\]}])/m', '$1', $str)

【大多就是出错在这个地方】

4.file_get_contents得到的JSON数据是带有BOM的utf-8,所以需要用正则匹配一下有就去掉。可用:

// 第一种方法去掉BOM
if(preg_match('/^\xEF\xBB\xBF/',$json)){
    $json = substr($json,3);
}
$data = json_decode(trim($json),true); 

// 第二种方法去掉BOM
$data = json_decode(trim($json,chr(239).chr(187).chr(191)),true);


以下是曾经用file_get_contents返回的JSON就碰到了这样的问题(JSON数据是带有BOM的):

下面就是加上:上面说的第4种去掉带有BOM的方法,当然你也可以1、2、3、4全写上!

header("Content-type:text/html;charset=utf-8");
$json = file_get_contents("URL地址");
$data = json_decode(trim($json,chr(239).chr(187).chr(191)),true);

print_r($data);



如果你觉得这篇教程的内容对你有帮助、请支持本站谢谢!  点击进入捐赠通道

转载请注明来源地址:小川编程 » http://www.youhutong.com/index.php/article/index/73.html

( 0 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情