如何将双引号放在php的ajax JSON响应中的字符串中?

2022-08-30 11:43:20

我在来自服务器的Ajax请求中收到JSON响应。这样它的工作原理:

{ “a” : “1”, “b” : “hello 'kitty'” }

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

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

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

如何做到这一点?

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

你好“小猫”

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

编辑2: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 . '"}';

编辑3:此解决方案最终有效:

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

答案 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 解析器传递。\"


答案 2

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


推荐