千家信息网

php json之decode 解析失败的示例分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这期内容当中小编将会给大家带来有关php json之decode 解析失败的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。php json_decode解析
千家信息网最后更新 2026年11月04日php json之decode 解析失败的示例分析

这期内容当中小编将会给大家带来有关php json之decode 解析失败的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

php json_decode解析失败的解决办法:1、通过json_last_error等函数获取错误码;2、根据utf8的编码范围剔除掉非法utf8字符。

本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

php json_decode 解析失败怎么办?

php json_decode解析失败及错误处理

一般情况下,获取到一段json内容,直接json_decode($content, true)就转成array来用了,很方便。
但是,如果给你提供json内容的接口出了点问题,给的json不标准或是干脆有错误,那就要想办法来找出问题了。
先看看json_encode的manul
https://www.php.net/manual/en/function.json-last-error.php

失败时返回NULL

 //  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5, "name":"Corwien"}';  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5, "name":}';  //错误的json格式 $result = json_decode($json, true);  if(!$result)  {        //error handle ,错误处理        $ret = json_last_error();        print_r($ret);   //打印为: 4,查错误信息表,可知是语法错误          }   json_last_error错误msg对照表:0 = JSON_ERROR_NONE1 = JSON_ERROR_DEPTH2 = JSON_ERROR_STATE_MISMATCH3 = JSON_ERROR_CTRL_CHAR4 = JSON_ERROR_SYNTAX5 = JSON_ERROR_UTF8

我们如何知道错在哪里了呢?

1、获取错误码

php有一个json_last_error函数,见
https://www.php.net/manual/en/function.json-last-error.php

它会返回错误码告诉我们是什么原因出错了。
错误码看不懂?可以用json_last_error_msg,见
https://www.php.net/manual/en/function.json-last-error-msg.php

不过json_last_error_msg只在php >= 5.5.0版本才有,如果版本低,就自己定义一个吧。

2、低版本php json错误码不全

但是,注意看manual就会发现,json_last_error定义的很多错误码都是在高版本里才有的,低版本的php就歇菜了。例如JSON_ERROR_UTF8这个错误码明白地告诉我们json字符串中有非法utf8字符,但是只在Php >= 5.3.3中才有。而很悲剧的是,我的php就是5.3.2....

所以,如果你的json_last_error返回的是JSON_ERROR_NONE(0) ,并不是说没有错误,而只是这个错误在你的低版本php中没有定义。再说,没有错误怎么会失败呢....

如果是json格式错误,再低版本的php都会告诉你JSON_ERROR_SYNTAX,所以碰上JSON_ERROR_NONE第一个可能性就往非法utf8字符串想.

3、如何处理json中的非法utf8字符

根据utf8的编码范围,是可以剔除掉非法utf8字符的。
可以参见https://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

//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 );

这里是把非法字符替换成?,根据需要自己改。

上述就是小编为大家分享的php json之decode 解析失败的示例分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

错误 字符 版本 分析 内容 示例 函数 办法 字符串 就是 格式 编码 范围 问题 处理 专业 中小 信息 内容丰富 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 美国互联网科技巨头监管 互联网巨头科技公司 中国互联网科技发展 迪茉互联网科技 亿人帮互联网科技 海南科技产业互联网平台 岳阳华臻互联网科技有限公司 互联网科技公司实习生 和信科技工业互联网 锡山区互联网智能科技产品供应 互联网领先科技宣传片 山东大美朱楼互联网科技有限公司 吉林省码上互联网科技电话 中国新注册互联网科技 湖北辰鑫科技互联网 银川新华互联网科技学校原画 广州三三互联网科技有限公司 恒生科技指数 中概互联网 保山浩联互联网科技有限公司 互联网科技的英文 猫创互联网科技 长亮科技 互联网金融 科技互联网的估值 互联网科技大奖都有哪些公司 深圳市罗太互联网科技有限公司 怎样加入科技互联网 工业互联网科技成果转化 风投北京互联网科技 唐山双旺合互联网科技产业园
0