PHP json_decode()报错 json_last_error()判断错误类型及解决方法
导读:
PHP json_decode()报错 json_last_error()判断错误类型 解决
背景:最近在用curl请求接口获取json数据串的时候,一直出现PHP中json_decode()解析字符串失败,于是网上各种查找资料,最终尝试了多种方式,总算解决。下面将可能会遇到的情况和解决方案总结于下:
注意:
低版本php json错误码不全
json_last_error()错误msg对照表:
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字符,也许是因为不正确的编码
json_last_error()函数测详细介绍请参见:
PHP中文手册
json_decode要求的字符串比较严格
使用UTF-8编码
不能在最后元素有逗号
不能使用单引号
不能有\r,\t,如果有请替换
一、bom头问题
json字符串中的BOM头是不可见字符,某些编辑器默认会加上BOM头。
$info = json_decode(trim($info,chr(239).chr(187).chr(191)),true);
二、语法错误
echo json_last_error()//=4
出现这个问题是因为在 json 字符串中反斜杠被转义,只需要用 htmlspecialchars_decode() 函数处理一下 $content 即可:
$info= htmlspecialchars_decode($info);
echo json_last_error()//=3
$info= preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', trim($info));
如何处理json中的非法utf8字符
//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
'|[\x00-\x7F][\x80-\xBF]+'.
'|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
'|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
'|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
'?', $some_string );
//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
'|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string );
相关推荐
Thinkphp6.0 获取绝对路径总结
Thinkphp6.0 获取绝对路径,改到了App 基础类里面获取,可通过助手函数获取: app()>getRootPath() //获取应用根目录 app()>get…
2022-06-30 16:33:52 | 分类:PHP | 作者:myerob | 阅读:635 | 标签:TP6 路径 | 收藏
CSS中设置height:100%无效的原因分析和解决方法
我们知道在把盒子宽度自适应为浏览器窗口宽度,只需设置width:100%就可轻松解决问题,但是让盒子的高度自适应浏览窗口的高度并非那么容易,下面举个例子:代码如下:<!-- 高度实际为字体大小 …
2022-10-30 12:24:34 | 分类:HTML,CSS | 作者:myerob | 阅读:2083 | 标签:CSS 设置 height:100% 无效 原因分析 解决方法 | 收藏
h3c交换机乱码怎么弄(h3c 配置备份报错)如何修改交换机字符集?
H3C 交换机常见配置问题FAQ-6W102-整本手册_CHM.rar H3C 交换机常见配置问题FAQ-6W102-整本手册.pdf H3C交换机 常见配置问题FAQh3c交换机…
2023-12-25 15:35:06 | 分类:默认 | 作者:myerob | 阅读:735 | 标签:h3c交换机乱码怎么弄(h3c 配置备份报错)如何修改交换机字符集? | 收藏
- 阅读榜
- 1. U.FL座 IPEX/IPX接头1代,2代,3代,4代,5代区分对照图
- 2. 什么情况下免征教育附加税,地方教育附加税?两附加费优惠政策
- 3. LCEDA如何将两块不同的PCB拼到一块板上,PCB拼板教程
- 4. 增值税已交税金和未交税金的区别是什么?
- 5. 什么是热电阻两线制、三线制、四线制接线?接法原理总结
- 6. 主席令13届第89号《中华人民共和国印花税法》
- 7. BCD码的定义以及其与十进制数据转换方法(附验证工具)
- 8. 记录一个非常实用的前端拖拽插件interact.js(JS前端开发)
- 9. 概率统计学中95%置信区间的系数1.96怎么得到的?
- 10. div+css+js实现类似marquee的无缝滚动代码示例