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

标签 php ajax escaping json

我收到来自服务器的 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 . '"}';

最佳答案

只需用反斜杠转义即可:

> 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 解析器传递.

关于php - 如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732409/

相关文章:

php - 如何执行这种类型的 MySQL 查询 - 基于 3 个表选择数据?

php - mysqli - 警告和错误

php - 从数据库获取文件名并将其从服务器中删除

php - Javascript:如何从输入表格的内容中找到相似的短语或文本?

c++ - 由转义字符组成的字符串文字的大小

javascript - PHP echo javascript - 不回显 $

javascript - 在多个表单提交后(在 Rails 中),尝试在 ajax 提交后再次显示 JQuery flash 消息

javascript - 在不重构的情况下将 jQuery $.ajax 包装在 q.js 的外观后面

c# - 正则表达式识别转义字符问题

javascript - 如何将包含逗号的值写入 csv 文件?