首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有双引号的json_encode传递给JSON.parse

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

Stack Overflow用户
提问于 2015-11-25 22:31:44
回答 1查看 643关注 0票数 2

多年来,我看到这个问题被问了太多次。在这段时间里,仍然禁不住要问是否有任何改进。

目前,我有PHP代码:

代码语言:javascript
复制
$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);

然后JS (特定角度)开始发挥作用:

代码语言:javascript
复制
var decoded = angular.fromJson('<?php echo $jsonData ; ?>');

上面的旗帜很好地防止了一些问题。然而,鉴于这个例子:

代码语言:javascript
复制
$data = ["name" => "Name \"Nickname\" Surname"];

JSON无法解析。如果我用addslashes()包装数据,它确实可以工作,但随后:

代码语言:javascript
复制
$data = ["name" => "Name 'Nickname' Surname"];

这是失败的。

由于$data的结构非常不可预测,并且通常是4-5层深,所以我的解决方案是:

代码语言:javascript
复制
array_walk_recursive($data, function(&$item, $key){
    $item = str_replace('"', '\"', $item);
});

这个工作,然而,我正在寻找一些更有知识的来源。我读过一些其他的问题,人们不仅逃避双引号,还逃避行提要、回车和反斜杠。

我最不需要的就是陷入边缘陷阱:)

有什么提示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-25 22:34:08

由于json可以直接用作javascript中的对象文字,所以可以这样使用它:

代码语言:javascript
复制
var decoded = <?php echo $jsonData ; ?>;

这样就不需要进行进一步的解析,以避免文本中的'\字符出现问题。json_encode应该已经在处理"字符了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33927573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档