1.   阿里云服务器1888元代金券领取
  2.   本网站所有源码包解压密码:www.youhutong.com
登录  帮助问答

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

小川 技术文章
郑重声明:
  本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,否则后果请用户自负,下载后请24小时内删除。 本站所有内容均不能保证其完整性,不提供任何技术支持,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用。
  如侵犯到任何版权问题,请立即告知本站(侵权投诉),本站将及时删除并致以最深的歉意

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);



 浏览器启用弹出窗口过滤功能,将无法跳转到下载页。在浏览器地址栏右边符号提示处点击允许就可以了!

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


  1、本站发布的内容仅限用于学习和研究目的.请勿用于商业或非法用途,下载后请24小时内删除。
  2、本站所有内容均不能保证其完整性,不能接受请勿购买或下载,如需完整程序,请去其官方购买正版使用
  3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。
  4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意
( 0 )个小伙伴在吐槽
    登录帐号  如果已经登录请刷新! 发表我的评论
    表情