今天在调用接口获取json数据转码的时候遇到了问题,记录一下
1.问题描述
成功获取到了数据,但经过json_decode
解码后却为 null
2.分析
使用 json_last_error()
函数得到错误代码 3
,在网上查到原因为返回的数据为 UTF-8
有 BOM
头编码,而 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 字符,也许是因为不正确的编码。