[英]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.