如何删除 json_encode() 函数上的反斜杠?
Posted
技术标签:
【中文标题】如何删除 json_encode() 函数上的反斜杠?【英文标题】:How to remove backslash on json_encode() function? 【发布时间】:2011-11-09 02:40:58 【问题描述】:如何删除字符串上的(\)
backslash?当使用echo json_encode()
时?
例如:
<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";
echo json_encode($str);
?>
注意:当你回显 $str 时,不会有问题...但是当你使用json_encode()
回显时,(\)
backslash 会出现。
有没有办法解决这个问题?
【问题讨论】:
我遇到了同样的问题,结果我在同一数据上使用了两次json_encode
,这实际上是添加反斜杠的原因。
JSON 要求数据中的引号字符用反斜杠转义,所以如果它这样做,它就可以正常工作。但是你为什么要对字符串进行 JSON 编码呢?
【参考方案1】:
json_encode($response, JSON_UNESCAPED_SLASHES);
【讨论】:
我只是想……如果有办法的话。我只是好奇。 我只想在 ajax 上发回。我只想在 php 而不是 javascript 上完成这个过程。 对不起...这是“正确”答案吗? JSON 现在到处都在使用,而不仅仅是在 Javascript 中……它只是一种序列化数据的方式。 PHP 通过在不应该包含它们的引号中添加完全多余的转义符来解决这个问题(以及其他许多问题)! DATA 应该有转义,而不是包装数据的引号!碰巧的是,必须删除这些引号才能使其正常工作,因为转义引号不是 JSON 的一部分。所以...一个人是怎么做到的?? 同意上述评论者。软件开发领域有很多边缘案例。这不是答案。 JSON_UNESCAPED_SLASHES 用于正斜杠,而不是引号。例如\/these\/slashes\/are\/the\/target -- 不是 \"these\"quotes\"are\"not\"the\"target【参考方案2】:您不想删除它。因为 JSON 使用双引号“”作为字符串,而你的返回
"$(\"#output\").append(\"
This is a test!<\/p>\")"
这些反斜杠转义这些引号
【讨论】:
【参考方案3】:是的,这是可能的。看!
$str = str_replace('\\', '', $str);
但是你为什么想要呢?
【讨论】:
【参考方案4】:有效的解决方案是这样的:
$str = preg_replace('/\\\"/',"\"", $str);
但是您必须非常小心,因为您需要确保所有值的引号都已转义(无论如何这通常都是正确的,但尤其是现在您将从 PHP 的白痴(并且功能失调)中剥离所有转义) 在所有对象 id 和值前面添加不必要的反斜杠的“助手”功能。
因此,默认情况下,php 会双重转义包含引号的值,因此如果您的数据库中有 My name is "Joe"
的值,php 会将其返回为
My name is \\"Joe\\"
.
这可能对你有用,也可能没用。如果不是,您可以采取额外的步骤,像这样替换前导斜杠:
$str = preg_replace('/\\\\\"/',"\"", $str);
是的......它很丑......但它有效。
然后你会得到一些与实际 JSON 模糊相似的东西。
【讨论】:
很好的答案!当我尝试解码转义的 JSON 字符串时,json_decode
不断提供null
,这就是为我解决的问题。
这对我来说是最简单的解决方案。 JSON_UNESCAPED_SLASHES 对我不起作用,尽管很可能是用户错误。【参考方案5】:
从 PHP 5.4 开始,json_encode()
可以使用常量来格式化 json 响应。
要删除反斜杠,请使用:JSON_UNESCAPED_SLASHES
。像这样:
json_encode($response, JSON_UNESCAPED_SLASHES);
查看 PHP 文档以获取更多常量和更多信息:
http://php.net/manual/en/function.json-encode.php
JSON 常量列表:
http://php.net/manual/en/json.constants.php
【讨论】:
应该从 5.4 开始提供?见here @joryl 该常量应该从 5.4 开始可用,因此它也应该在较新的版本中工作 感谢您的回复 :) 例如,它应该在 5.5 中工作吗?如果不是,他们为什么要删除它? 5.4 之后的版本有什么替代品? @joryl 它应该适用于 5.4+ 。您是否发现在较新版本的 PHP 中使用它有问题? 我刚刚在 PHP 5.6 中发现JSON_UNESCAPED_SLASHES
可以很好地处理正斜杠,但不能处理反斜杠【参考方案6】:
更简单的方法是
$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
【讨论】:
【参考方案7】:正如 HungryDB 所说,更简单的方法是:
$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
看看你的php版本因为5.4.0版本已经添加了这个参数
json_encode documentation
【讨论】:
【参考方案8】:我刚刚发现json_encode
仅在 \n
用在单引号内时才转义。
echo json_encode("Hello World\n");
// results in "Hello World\n"
和
echo json_encode('Hello World\n');
// results in "Hello World\\\n"
【讨论】:
【参考方案9】:我使用以下方法删除斜线
echo json_decode($mystring, JSON_UNESCAPED_SLASHES);
【讨论】:
【参考方案10】:如果您使用 PHP 5.2,json_encode 在调用时只需要 1 个参数。这是 json 值的 unescape 斜线的替代方法:
stripslashes(json_encode($array))
如果您的数据很复杂,请不要使用它。
【讨论】:
以上是关于如何删除 json_encode() 函数上的反斜杠?的主要内容,如果未能解决你的问题,请参考以下文章
跳出多层循环体(做标记)-求最小公倍数-9*9星星矩阵-9*9正斜三角-9*9反斜三角-侧边9*9正斜三角-九九乘法表-求任意个数字之和