Php 如何删除json_encode()函数上的反斜杠?

Php 如何删除json_encode()函数上的反斜杠?,php,ajax,json,function,backslash,Php,Ajax,Json,Function,Backslash,如何删除字符串上的(\)反斜杠?当使用echo json_encode()时 例如: <?php $str = "$(\"#output\").append(\"<p>This is a test!</p>\")"; echo json_encode($str); ?> 注意:当您回显$str时,不会有任何问题。。。但是当您使用json\u encode()进行回显时,将显示(\)反斜杠 有办法解决这个问题吗?您不想删除它。因为JSON对字符串使用双引

如何删除字符串上的
(\)
反斜杠?当使用echo json_encode()时

例如:

<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";

echo json_encode($str);
?>

注意:当您回显$str时,不会有任何问题。。。但是当您使用
json\u encode()
进行回显时,将显示
(\)
反斜杠


有办法解决这个问题吗?

您不想删除它。因为JSON对字符串使用双引号“”,而您的

json_encode($response, JSON_UNESCAPED_SLASHES);
"$(\"#output\").append(\"
This is a test!<\/p>\")"
“$(\”\35; output\”)。追加(\”
这是一个测试!\“”“

这些反斜杠省略了这些引号

是的,这是可能的。看

$str = str_replace('\\', '', $str);

但是为什么要这样做呢?

有效的解决方案是:

$str = preg_replace('/\\\"/',"\"", $str);
但是,在这里您必须非常小心,因为您需要确保所有的值都有引号转义(这通常是正确的,但尤其是现在您将从PHP的愚蠢(和功能失调的)“helper”中剥离所有转义在所有对象ID和值前面添加不必要的反斜杠的功能)

因此,默认情况下,php会双转义包含引号的值,因此如果数据库中的值为
我的名字是“Joe”
,php会将其作为
我的名字是\\“Joe\\”

这可能对您有用,也可能没有用处。如果不是,您可以采取额外的步骤,替换前面的斜杠,如下所示:

$str = preg_replace('/\\\\\"/',"\"", $str);
嗯。。。很难看。。。但它是有效的


然后剩下的是一些模糊地类似于实际JSON的内容。

由于PHP5.4,有一些常量可以被
JSON\u encode()
用来格式化JSON响应

要删除反斜杠,请使用:
JSON\u UNESCAPED\u斜杠
。像这样:

json_encode($response, JSON_UNESCAPED_SLASHES);
查看PHP文档以了解更多常量和更多信息:

JSON常量列表:

更简单的方法是

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

正如HungryDB所说,更简单的方法是:

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
查看您的php版本,因为此参数已添加到版本5.4.0中


我刚刚发现
json\u encode
只有在单引号中使用时才会转义
\n

echo json_encode("Hello World\n");
// results in "Hello World\n"


我使用以下命令删除斜杠

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);

如果您使用PHP5.2,那么json_encode在调用它时只需要1个参数。这是json值的unescape斜杠的替代方法:

stripslashes(json_encode($array))

如果您的数据很复杂,请不要使用它。

我只想。。。如果有办法的话。我只是对它很好奇。我只是想把它发回到ajax上。我只想在php而不是javascript上完成这个过程。对不起。。。这怎么是“正确”的答案??JSON现在被广泛使用,不仅仅是在Javascript中。。。这只是一种序列化数据的方法。PHP将完全超级转义添加到不应该包含转义的引号中,从而将这一点(以及其他许多事情)搞砸了!数据应该有转义符,而不是包装数据的引号!而且,由于转义引号不是JSON的一部分,因此必须删除这些引号才能正常工作。所以一个人怎么做?同意上面的评论。在软件开发领域有很多边缘案例。这不是答案。JSON_UNESCAPED_斜杠用于正斜杠,而不是引号。e、 g.\/这些\/斜杠\/是\/目标--而不是\“这些\”引号\“不是\”目标伟大的答案!这就是当我试图解码转义的json字符串时,
json\u decode
不断给出
null
时解决问题的方法。这对我来说是最简单的解决方法。JSON_UNESCAPED_SLASHES不适合我,尽管很可能是用户错误。我遇到了同样的问题,结果是我在同一数据上使用了两次
JSON_encode
,这实际上就是添加反斜杠的原因。JSON要求数据中的引号字符用反斜杠转义,因此,如果它这样做,它的功能是正确的。但是为什么JSON编码字符串?应该从5.4开始提供?请参阅@joryl该常量应该从5.4开始可用,因此它应该在更新版本的tooThanks中工作,以获取答复:)例如,它应该在5.5中工作?如果没有,他们为什么要删除它?那么更新的5.4版本有什么替代方案呢?@joryl它应该与5.4+兼容。在新版本的PHP中使用它会有问题吗?我刚刚在PHP5.6中发现,
JSON\u UNESCAPED\u SLASHES
可以很好地用于正向斜杠,但对反向斜杠却无能为力
stripslashes(json_encode($array))