带双引号的json_encode传递到json.parse中

json_encode with double quotes passed into JSON.parse

本文关键字:json parse encode      更新时间:2023-09-26

这些年来,我发现这个问题被问了太多次。在这段时间里,我还是忍不住要问是否有什么改进。

目前,我有PHP代码:

$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);

然后JS(具体来说是Angular)开始发挥作用:

var decoded = angular.fromJson('<?php echo $jsonData ; ?>');

上面的旗帜很好地解决了一些问题。然而,举个例子:

$data = ["name" => "Name '"Nickname'" Surname"];

JSON解析失败。如果我用addslashes()包装数据,它确实有效,但是:

$data = ["name" => "Name 'Nickname' Surname"];

这失败了。

由于结构$data是高度不可预测的,通常深度为4-5级,我的解决方案是:

array_walk_recursive($data, function(&$item, $key){
    $item = str_replace('"', ''"', $item);
});

这是有效的,但是,我正在寻找一些知识更丰富的来源。我读过其他一些SO问题,人们不仅可以转义双引号,还可以转义换行符、回车符和反斜杠。

我最不需要的就是陷入边缘案例陷阱:)

有什么提示吗?

由于json可以直接用作javascript中的对象文字,因此可以这样使用它:

var decoded = <?php echo $jsonData ; ?>;

从而消除了进行任何进一步解析以避免文本中的CCD_ 3或CCD_。CCD_ 5应该已经在处理CCD_。