小编典典

如何在PHP的ajax JSON响应中的字符串中加上双引号?

ajax

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

阅读 318

收藏
2020-07-26

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

2020-07-26