43

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

例如:

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

echo json_encode($str);
?>

注意:当你 echo $str 时,不会有问题...但是当你 echo out usingjson_encode()时,(\)反斜杠会出现。

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

4

10 回答 10

80
json_encode($response, JSON_UNESCAPED_SLASHES);
于 2011-09-02T11:31:13.913 回答
53

从 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

于 2014-03-26T00:05:07.133 回答
12

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

stripslashes(json_encode($array))

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

于 2017-12-22T02:27:26.623 回答
9

有效的解决方案是:

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

但是,您必须在这里非常小心,因为您需要确保所有值的引号都已转义(无论如何这通常都是正确的,但尤其是现在您将从 PHP 的白痴(和功能失调)“助手”中剥离所有转义" 在所有对象 ID 和值前面添加不必要的反斜杠的功能)。

因此,默认情况下,php 会双重转义包含引号的值,因此如果您My name is "Joe"的数据库中有值,php 会将其带回为 My name is \\"Joe\\".

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

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

是的......它很丑......但它有效。

然后你会得到一些与实际 JSON 模糊相似的东西。

于 2013-01-12T23:04:24.353 回答
5

更简单的方法是

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
于 2014-12-10T08:54:25.207 回答
5

我刚刚发现只有在单引号中使用它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"
于 2016-05-13T11:55:44.320 回答
3

是的,这是可能的。看!

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

但你为什么想要?

于 2011-09-02T14:20:36.600 回答
3

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

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

看看你的 php 版本,因为这个参数已经在 5.4.0 版本中添加了

json_encode 文档

于 2016-02-18T09:29:43.043 回答
1

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

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

这些反斜杠转义了这些引号

于 2011-09-02T11:32:11.607 回答
1

我使用以下内容删除斜线

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);
于 2017-08-23T11:32:38.513 回答