多年来,我看到这个问题被问了太多次。在这段时间里,仍然禁不住要问是否有任何改进。
目前,我有PHP代码:
$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);然后JS (特定角度)开始发挥作用:
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);
});这个工作,然而,我正在寻找一些更有知识的来源。我读过一些其他的问题,人们不仅逃避双引号,还逃避行提要、回车和反斜杠。
我最不需要的就是陷入边缘陷阱:)
有什么提示吗?
发布于 2015-11-25 22:34:08
由于json可以直接用作javascript中的对象文字,所以可以这样使用它:
var decoded = <?php echo $jsonData ; ?>;这样就不需要进行进一步的解析,以避免文本中的'或\字符出现问题。json_encode应该已经在处理"字符了。
https://stackoverflow.com/questions/33927573
复制相似问题