我正试图用PHP构建一个大型JSON字符串,然后像这样将其返回到客户端。我的问题是PHP函数json_encode
没有正确地为javascript的目的转义字符。
这是我的数据:
my_table
------------------------------------------------------------------
| title | description |
------------------------------------------------------------------
| Something's "Fun" | Hello[invisible carriage return char]World |
------------------------------------------------------------------
这些数据中有三个字符需要转义:单引号、双引号和回车符。
以下是我的php,它将数据转换为json(在我将数据放入对象之后):
$array = array(
'title' => obj->title,
'desc' => obj->description
);
$json = json_encode($array);
然后,我使用带有"正确"转义字符的json字符串,并从我的视图中将其回显到客户端,如下所示:
<script>
var jsonString = '<?php echo $json; ?>';
var obj = JSON.parse(jsonString);
</script>
但当页面加载时,我的浏览器(Chrome)会推送一个"意外标识符"错误,因为这就是脚本标记的实际样子:
<script>
var jsonString = '{"title":"Something's '"Fun'"","desc":"Hello'nWorld"}';
var obj = JSON.parse(jsonString);
</script>
从js的角度来看,双引号是唯一正确转义的。单引号一点也没有被转义,js在n处吓坏了。
BTW:手动转义单引号无效。我不知道该怎么办才能让js识别它。
这只是对json的误解:以可以创建javascript对象的格式编写。因此,一旦json字符串在<script>
标记中被回显到页面,就不需要解析它
<script>
var obj = <?php $json; ?>;
</script>