微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP的json_encode不会转义所有JSON控制字符

如何解决PHP的json_encode不会转义所有JSON控制字符

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将不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。