关于json_decode 在php 中的一些无法解析的字符串,包括以下几种常见类型。
一、Bug#42186 json_decode()won'tworkwith\l
当字符串中含有\l 的时候,json_decode 是无法解析,测试代码:
echo "***********json_decode() won't work with \l*************<br/>";
$json = '{"stringwithbreak":"line with a \lbreak!"}';
var_dump($json);//stringwithbreak":"line with a \lbreak!
var_dump(json_decode($json, true));//null
解决办法:
主要是将\l 进行替换,当然如果真的需要‘\l ’,我们就必须不使用json_decode 进行解析,可以当作当个字符进行提交。
var_dump(str_replace("\\l", "", $json));//stringwithbreak":"line with a break!
print_r(json_decode(str_replace("\\l", "", $json), true));//Array ( [stringwithbreak] => line with a break! )
二、TabsinJavascriptstringsbreakjson_decode()
当字符串中含有tab 键时,json_decode() 无法解析,例如代码3-1
echo "<br/>***********Tabs in Javascript strings break json_decode()*************<br/>";
var_dump(json_decode('{ "abc": 12, "foo": "barbar" }'));
执行后的返回结果为null
解决办法:
1、当遇到含有tab 键输入的字符串时,我们应该避免使用json 将数据传到php ,然后使用php 作为解析。
2、同样可以使用如下3-2 代码方式进行替换
$myStr = '{ "abc": 12, "foo": "barbar" }';
$replaceStr = str_replace("", "\\t", $myStr);
var_dump($replaceStr);
var_dump(json_decode($replaceStr ));
三、json_decodereturnsfalsewhenleadingzerosaren'tescapedwithdoublequotes
当json 的value 值为number 类型,而且该number 以0 开头,例如代码4-1
echo "<br/>***********json_decode returns false when leading zeros aren't escaped with double quotes*************<br/>";
$noZeroNumber = '{
"test" : 6
}';
$zeroNumber= '{
"test" : 06
}';
var_dump(json_decode($noZeroNumber));//object(stdClass)[1]
public 'test' => int 6
var_dump(json_decode($zeroNumber));//null
或许对于这种问题很少出现,但是一旦出现了,我们就很难去查找问题的原因。
四、decodechokesonunquotedobjectkeys
当key 值没有使用引号时,会无法解析,例如代码5-1
echo "<br/>***********decode chokes on unquoted object keys*************<br/>";
var_dump(json_decode('{"a":"tan","model":"sedan"}'));//object(stdClass)[1]
public 'a' => string 'tan' (length=3)
public 'model' => string 'sedan' (length=5)
var_dump(json_decode('{a:"tan","model":"sedan"}'));//null
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com
所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298
本贴地址:https://www.yunweiku.com/thread-364330-1-1.html
上篇帖子:
PHP正则表达式 /i, /is, /s, /isU等参数含义详解
下篇帖子:
PHP生成excel时单元格内换行问题的解决方法