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

时间:2010-04-28 19:06:46

标签: php ajax escaping json

我在服务器的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 . '"}';

Edit3:此解决方案最终有效:

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

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

有点偏离主题,你可以在你的服务器上使用JavaScript / NodeJS并使用ES6模板文字(反键词``用于" Christian"),但7年后你可能已经使用了NodeJS: )

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