问题描述
D’oh-您需要双重编码:JSON.parse当然需要一个字符串:
<script type="text/javascript">
JSON.parse(<?PHP echo json_encode($s) ?>);
</script>
解决方法
有什么原因导致PHP的json_encode函数无法对字符串中的所有JSON控制字符进行转义?
例如,让我们采用一个跨越两行并包含控制字符(\ r \ n“ / \)的字符串:
<?php
$s = <<<END
First row.
Second row w/ "double quotes" and backslash: \.
END;
$s = json_encode($s);
echo $s;
// Will output: "First row.\r\nSecond row w\/ \"double quotes\" and backslash: \\."
?>
请注意,回车符和换行符不转义。为什么?
我使用jQuery作为JS库,并且当您完全100%信任传入的数据时,它的$
.getJSON()函数可以正常工作。否则我会像其他人一样使用JSON.org的库json2.js。但是,如果您尝试解析该编码字符串,则会引发错误:
<script type="text/javascript">
JSON.parse(<?php echo $s ?>); // Will throw SyntaxError
</script>
而且您无法获取数据!如果删除或转义该字符串中的\ r \ n“和\,则JSON.parse()不会引发错误。
是否有任何现有的良好的PHP函数用于转义控制字符。具有搜索和替换数组的简单str_replace将不起作用。