解决PHP下json_decode返回NULL的问题。

这两天自己做了个公共API接口,遇到了一个很烦人的bug,就是接口传回了json字符串,但是本地的后台在获取字符串后,用json_decode()转码的话返回NULL。

在网上找了很多办法,最后终于用trim($result,chr(239).chr(187).chr(191))这个函数搞定了!

原因就是UTF-8的DOM头影响,用trim($result,chr(239).chr(187).chr(191))切割掉字符串前面的BOM头就可以正常转码了。

代码:

$result = getAPIData($url);
$result = trim($result,chr(239).chr(187).chr(191));
$result = json_decode($result,true);

附:
BOM头的另一种解决方案:

$result = getAPIData($url);
$result = substr($result,3);
$result = json_decode($result,true);

这种方案按说也可以,而且效率更高。但是我用了之后并不起作用,不知道为什么……

附:
json_decode()返回为NULL的其他原因与解决方案。
0:
5.3版本以上的PHP自带一个json_last_error()函数,可以返回最近一次的json编码错误代码。

1:编码格式问题:
json字符串的编码格式必须是utf-8格式的。
这里有两种查看字符串编码格式的方法:
①:在浏览器中按F12,找到

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
标签,charset后面就是编码格式。 ②:使用
$encode = mb_detect_encoding($result, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
函数,返回值就是字符串的编码格式。 如果确定是编码格式问题的话,就用iconv()函数来转码。
$result = getAPIData($url);
$result = iconv('gbk', 'utf8', $result);
$result = json_decode($result,true);

2:json语法错误
如果感觉是语法错误的话最好百度一个工具来测试一下到底是哪里的语法错误。
用法很简单,把json字符串复制进去之后按“校验”按钮即可。
①:json字符串两遍必须以双引号来包含。

//演示:被单引号包含的字符串修改为被双引号修改的字符串
$result = getAPIData($url);
$result = str_replace(&quot;'&quot;, '&quot;', $result);
$result = json_decode($result,true);

②:json对象中最后一个元素后面不能有逗号。

$result = getAPIData($url);
$result = preg_replace('/,s*([]}])/m', '$1', $output);
$result = json_decode($result,true);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值