繁体   English   中英

带有双引号的json_encode传递给JSON.parse

[英]json_encode with double quotes passed into JSON.parse

我已经看到,多年来这个问题被问了太多遍了。 仍然不能不问这段时间是否有任何改进。

目前,我有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 ; ?>;

因此,无需进行任何进一步的分析,以避免文本中'\\字符出现问题。 json_encode应该已经采取的照顾" charaters。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM