【注意】最后更新于 December 6, 2019,文中内容可能已过时,请谨慎使用。
- 当 json_decode 解析为
null
的时候怎么处理
- 当 json 中出现非法 utf8 时怎么处理
失败时返回NULL
当返回 null
的时候,可以用json_last_error()
根据返回码来判断
如果 php 版本过低的话将会出现错误码反馈不全的问题,返回值是JSON_ERROR_NONE (0)
这是示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// $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_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8
|
如何处理json中的非法utf8字符
如果出现 JSON_ERROR_SYNTAX
这个错误码的时候,常见的要么是其中的双引号单引号问题,要么是
出现了 /r/n
之类的结尾问题,还有一种比较烦的情况就是错误的 utf8编码
解决问题:
1
2
3
4
5
6
7
8
9
10
11
|
//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 );
|
原文
utf8代码
文章作者
GPF
上次更新
2019-12-06
(7ba517e)