如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?
Posted
技术标签:
【中文标题】如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?【英文标题】:How can I put double quotes inside a string within an ajax JSON response from php? 【发布时间】: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 中是不允许的。
【参考方案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 解析器传递。
【讨论】:
非常感谢!你拯救了我的一天。这对我有用: $b = str_replace('"','\\"',$b); - karlthorwald - 又名 @user89021:请阅读有关转义反斜杠的部分。 你拯救了我的一周。由于有多个解析器,我不得不添加三个斜杠。终于成功了!【参考方案2】:只使用 json_encode(任何 PHP 元素),它会自动解析。
【讨论】:
是的,但是我的 php 版本太旧了,ubuntu hardy 还没有,这里只有 PHP 5.2.4-2ubuntu5.10 - karthorwald - aka 我会再次检查,因为 5.2 应该有它。上次它不在那里:o【参考方案3】:有点题外话,你可以在你的服务器上使用 JavaScript/NodeJS 并使用 ES6 模板文字(在“Christian”周围使用的反引号 ``),但 7 年后你可能已经在使用 NodeJS :)
var myJSON =
"name":
"first": `"Christian"`,
"last": "Broberg"
,
"age": 49,
"skills": [ "JavaScript", "React", "NodeJS" ],
"married": false,
"superpowers": null
【讨论】:
以上是关于如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 脚本如何向 Dojo 的 xhrGet 发送 JSON Ajax 响应?
在 PHP 中使用来自 AJAX 请求的 JSON 字符串 [关闭]