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

时间:2011-09-02 11:28:55

标签: php ajax json function backslash

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

例如:

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

echo json_encode($str);
?>

注意:当你回显$ str时,没有问题...但是当你使用json_encode()回显时,会出现(\)反斜杠。

有没有办法解决这个问题?谢谢。

10 个答案:

答案 0 :(得分:46)

自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

答案 1 :(得分:23)

json_encode($response, JSON_UNESCAPED_SLASHES);

答案 2 :(得分:7)

有效的解决方案是:

$str = preg_replace('/\\\"/',"\"", $str);

但是你必须非常小心,因为你需要确保你的所有值都有它们的引号被转义(无论如何这通常都是正确的,但特别是现在你将剥夺所有逃脱PHP的愚蠢(和功能失调) )“帮助”功能,在所有对象ID和值之前添加不必要的反斜杠。)

所以,php,默认情况下,double会转义你的值中包含引号的值,所以如果你的数据库中有My name is "Joe"的值,php会把它带回来 My name is \\"Joe\\"

这可能对您有用,也可能没用。如果不是,那么你可以采取额外的步骤来替换那里的前导斜杠:

$str = preg_replace('/\\\\\"/',"\"", $str);
是的......它太丑了......但它确实有效。

然后你会留下一些模仿真实JSON的东西。

答案 3 :(得分:3)

更简单的方法是

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

答案 4 :(得分:3)

我只是发现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"

答案 5 :(得分:2)

是的,这是可能的。瞧!

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

但你为什么要这样做?

答案 6 :(得分:2)

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

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

查看您的php版,因为此参数已在5.4.0版中添加

json_encode documentation

答案 7 :(得分:2)

如果使用PHP 5.2,json_encode在调用时只需要1个参数。这是json值的unescape斜杠的替代方法:

stripslashes(json_encode($array))

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

答案 8 :(得分:0)

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

"$(\"#output\").append(\"
This is a test!<\/p>\")"

这些反斜杠会逃避这些引号

答案 9 :(得分:0)

我使用以下内容删除斜杠

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);