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

use*_*021 40 php ajax json escaping

我从服务器收到Ajax请求中的JSON响应.这种方式有效:

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

但我没有成功地在kitty周围加双引号.

当我在Ajax响应中将"转换为\ x22时,它仍被解释为"由JavaScript而我无法解析JSON.

我是否也应该逃避\和unescape以后(这是可能的)?

这该怎么做?

编辑:我不确定我是否表达得很好:我想在解析之后将这个字符串放在"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 . '"}';
Run Code Online (Sandbox Code Playgroud)

Edit3:这个解决方案最终有效:

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

Max*_*keh 56

用反斜杠逃脱:

> 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
Run Code Online (Sandbox Code Playgroud)

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