我已经看到这个问题多年来被问过这么多次了。在此期间,仍然无法询问是否有任何改进。
目前,我有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问题,人们不仅可以使用双引号,还可以使用换行,回车和反斜杠。
我需要的最后一件事就是陷入边缘情况陷阱:)
对我有任何暗示吗?
答案 0 :(得分:3)
由于json可以在javascript中直接用作对象文字,你可以像这样使用它:
var decoded = <?php echo $jsonData ; ?>;
因此无需进行任何进一步的解析以避免文本中的'
或\
字符出现问题。 json_encode
应该已经在处理"
字符。