如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?

Posted

技术标签:

【中文标题】如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?【英文标题】:How can I put double quotes inside a string within an ajax JSON response from php? 【发布时间】:2011-02-13 12:21:34 【问题描述】:

我在来自服务器的 Ajax 请求中收到 JSON 响应。这样就可以了:

"a" : "1", "b" : "hello 'kitty'"

但我没有成功在 kitty 周围加上双引号。

当我在 Ajax 响应中将 " 转换为 \x22 时,它仍然被 javascript 解释为 ",我无法解析 JSON。

我是否也应该转义 \ 并稍后取消转义(这是可能的)?

如何做到这一点?

编辑:我不确定我是否表达得很好:我希望这个字符串在“b”中解析之后:

你好“小猫”

如果有必要,我还可以在解析后添加一个额外的步骤来转换“b”,但我想这不是必需的,有一种更优雅的方法可以自动发生吗?

Edit2: ajax页面是用php生成的。我现在尝试了几件事来创建 b 的值,都导致页面上的 JSON 解析错误:

  $b = 'hello "kitty"';      

  // no 1:
  //$b = str_replace('"',"\x22",$b);

  // or no 2:
  // $b = addslashes($b);  

  // or no 3: 
  $b = str_replace('"','\"',$b);

  echo ' "a" : "1", "b" : "' . $b . '"';

Edit3:这个解决方案终于奏效了:

$b = 'hello "kitty"';      
$b = str_replace('"','\\"',$b); 
echo ' "a" : "1", "b" : "' . $b . '"';

【问题讨论】:

\" 可以,\u0022 可以,但是\x22 虽然在 JavaScript 字符串文字中有效,但在 JSON 中是不允许的。 【参考方案1】:

只需用反斜杠转义即可:

> JSON.stringify("a": 5, "b": 'a "kitty" mighty odd')
"a":5,"b":"a \"kitty\" mighty odd"
> JSON.parse('"a":5,"b":"a \\"kitty\\" mighty odd"')
Object
  a: 5
  b: a "kitty" mighty odd
  __proto__: Object

JSON 解析器将双引号字符串中的 \" 识别为双引号。请注意,在第二个示例中,需要使用双反斜杠,因为有一个 Javascript 解析器传递,然后是另一个 JSON 解析器传递。

【讨论】:

非常感谢!你拯救了我的一天。这对我有用: $b = str_replace('"','\\"',$b); - karlthorwald - 又名 @user89021:请阅读有关转义反斜杠的部分。 你拯救了我的一周。由于有多个解析器,我不得不添加三个斜杠。终于成功了!【参考方案2】:

只使用 json_encode(任何 PHP 元素),它会自动解析。

【讨论】:

是的,但是我的 php 版本太旧了,ubuntu hardy 还没有,这里只有 PHP 5.2.4-2ubuntu5.10 - karthorwald - aka 我会再次检查,因为 5.2 应该有它。上次它不在那里:o【参考方案3】:

有点题外话,你可以在你的服务器上使用 JavaScript/NodeJS 并使用 ES6 模板文字(在“Christian”周围使用的反引号 ``),但 7 年后你可能已经在使用 NodeJS :)

var myJSON = 
    "name": 
        "first": `"Christian"`,
        "last": "Broberg"
    ,
    "age": 49,
    "skills": [ "JavaScript", "React", "NodeJS" ],
    "married": false,
    "superpowers": null

【讨论】:

以上是关于如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 脚本如何向 Dojo 的 xhrGet 发送 JSON Ajax 响应?

在 PHP 中使用来自 AJAX 请求的 JSON 字符串 [关闭]

带有json响应的jQuery ajax请求,如何?

来自 html 中 php 脚本的 AJAX 调用显示响应

Objective-C:来自 jquery 回调的 json 响应

php中使用ajax进行前后端json数据交互