【发布时间】:2011-02-13 12:21:34
【问题描述】:
我在来自服务器的 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 . '"}';
【问题讨论】:
-
\"可以,\u0022可以,但是\x22虽然在 JavaScript 字符串文字中有效,但在 JSON 中是不允许的。