PHP post数据 json_decode 错误 4 JSON_ERROR_SYNTAX 错误详解

当PHP的json_decode返回NULL且last_error显示4(JSON_ERROR_SYNTAX)时,可能是由于BOM、不可见字符或单引号字符串值导致。解决方案包括移除BOM,清理不可见字符,以及修正单引号字符串。提供了解决这三种情况的PHP代码片段。
摘要由CSDN通过智能技术生成

错误描述

在PHP开发过程中,处理json字符串时, json_decode返回NULL,调用last_error返回4(JSON_ERROR_SYNTAX),但是json字符串能够被其它语言如python, javascript或者一些在线的json解析器正确处理。

诊断

这里一般会有以下几种情况会造成php json_decode出错:

json串从文件中读取,字符顺序标记(BOM)未去除

json中含有不可见字符,json_decode解析出错

json对象中值为单引号字符串

尤其是第三种错误比较隐蔽,肉眼观察往往容易忽略

解决方案

下面针对上面三种情况分别给出解决方案

BOM

以二进制方式打开文件,确认是否有BOM,如果有,在解析之前去掉BOM即可。下面的代码以utf-8为例,检测并删除BOM。

function removeBOM($data) {    

    if (0 === strpos(bin2hex($data), 'efbbbf')) {        

        return substr($data, 3);    

    }    

    return $data;

}

不可见字符

解析前去除不可见字符即可。

for ($i = 0; $i <= 31; ++$i) {

    $s = str_

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值