PHP中json_decode返回值为null

本文记录了在PHP中遇到json_decode返回null的问题及其解决过程。问题源于JSON数据的编码格式不匹配,通过json_last_error函数确定错误类型,并采用正则替换的方式解决了编码问题。
摘要由CSDN通过智能技术生成

今天在调用接口获取json数据转码的时候遇到了问题,记录一下

1.问题描述

成功获取到了数据,但经过json_decode 解码后却为 null

2.分析

使用 json_last_error() 函数得到错误代码 3,在网上查到原因为返回的数据为 UTF-8BOM 头编码,而 PHP 使用的是 无 BOM 头的UTF-8编码,所以解析错误,知道错误了就好办了,下面就来解决。

3.解决

这里我使用了正则替换的方法

// 注意,这里要先把空格给清除掉
$tempResult =  preg_replace('/[\x00-\x1F\x80-\x9F]/u', '',trim($tempResult));

4.总结

json_last_error这个函数很重要,这里我整理了一些json_last_error返回值对应的错误信息,可以根据这些错误信息去网上搜索相应的解决方案:

  • 0 = JSON_ERROR_NONE      没有错误发生
  • 1 = JSON_ERROR_DEPTH      到达了最大堆栈深度
  • 2 = JSON_ERROR_STATE_MISMATCH      无效或异常的 JSON
  • 3 = JSON_ERROR_CTRL_CHAR      控制字符错误,可能是编码不对
  • 4 = JSON_ERROR_SYNTAX      语法错误
  • 5 = JSON_ERROR_UTF8      异常的 UTF-8 字符,也许是因为不正确的编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值