带双引号的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 ; ?>;
从而消除了进行任何进一步解析以避免文本中的CCD_ 3或CCD_。CCD_ 5应该已经在处理CCD_。
相关文章:
- JSON.parse没有'不能使用Javascript
- Javascript JSON.parse not working
- 当其他解析器认为意外的令牌有效时,json.parse会失败
- 无法将JSON.parse与JSON_encode中的结果一起使用
- 在JSON.parse Javascript中字符串化Java对象抛出错误
- JSON.parse,已经在try/catch块中,仍然抛出语法错误
- 停止JSON.parse()从JSON字符串数据中删除尾随零
- JSON.parse给了我一个错误,但JSONLint说它'是一个有效的json
- 从JSON.parse获取元素
- JSON.parse:应为''或'}'在对象的属性值之后
- AJAX语法错误:JSON.parse:意外字符
- 如何避免JSON.stringify在特殊情况下返回undefined,从而为JSON.parse创建字符串失败
- 使用JSON.parse时出现无效字符javascript错误
- 动态地将过滤器应用于 JSON.parse()
- 为什么 JSON.parse 给出无效的字符
- 想要将 JSON 字符串传递给 javascript 变量 [ JSON.parse(),eval()] 对我不起作用,
- 使用 JSON.parse 将字符串(变量)转换为对象,错误意外标记
- “JSON.parse(str)”返回“意外令牌c”,但str是一个字符串
- AngularJS json.parse 在 json 数据的第 1 行第 1 列处意外的数据结尾
- 带有Ajax请求的Javascript JSON.parse函数n〃;新行转义字符