日期:2014-05-16  浏览次数:20381 次

json_decode在php中的一些无法解析的字符串

 关于json_decodephp中的一些无法解析的字符串,包括以下几种常见类型。

一、Bug #42186 json_decode() won't work with \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! ) 


二、Tabs in Javascript strings break json_decode()

当字符串中含有tab键时,json_decode()无法解析,例如代码3-1

echo "<br/>***********Tabs in Javascript strings break json_decode()*************<br/>";
var_dump(json_decode('{ "abc": 12, "foo": "bar	bar" }'));


执行后的返回结果为null

解决办法:

1、当遇到含有tab键输入的字符串时,我们应该避免使用json将数据传到php,然后使用php作为解析。

2、同样可以使用如下3-2代码方式进行替换

$myStr = '{ "abc": 12, "foo": "bar	bar" }';
$replaceStr = str_replace("	", "\\t", $myStr);
var_dump($replaceStr);
var_dump(json_decode($replaceStr ));


三、json_decode returns false when leading zeros aren't escaped with double quotes

jsonvalue值为number类型,而且该number