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

问题描述 投票:17回答:10

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

例如:

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

echo json_encode($str);
?>

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

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

php ajax json function backslash
10个回答
22
投票
json_encode($response, JSON_UNESCAPED_SLASHES);

0
投票

我使用以下内容删除斜杠

echo json_decode($mystring, JSON_UNESCAPED_SLASHES);

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


7
投票

有效的解决方案是这样的:

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

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

所以,php,默认情况下,双重转义你的值中带有引号的值,所以如果你的数据库中有My name is "Joe"的值,那么php将把它作为My name is \\"Joe\\"

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

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

是的......它很难看......但它确实有效。

然后你会留下一些模糊地类似于实际JSON的东西。


3
投票

更简单的方法是

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

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"

2
投票

是的,这是可能的。看!

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

但你为什么要这样做?


2
投票

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

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

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

json_encode documentation


2
投票

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

stripslashes(json_encode($array))

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


0
投票

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

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

这些反斜杠逃脱了这些引号

© www.soinside.com 2019 - 2024. All rights reserved.