在PHP中构建JSON时转义字符并在<;脚本>;


Escaping Characters When Building JSON in PHP and Echoing It in <script>

我正试图用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>