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

Rya*_*yan 23 php ajax json function backslash

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

例如:

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

echo json_encode($str);
?>
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*r87 49

从PHP 5.4开始,有一些常量可用于json_encode()格式化json响应的方式.

要删除反斜杠,请使用:JSON_UNESCAPED_SLASHES.像这样:

json_encode($response, JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)

查看PHP文档以获取更多常量和更多信息:

http://php.net/manual/en/function.json-encode.php

JSON常量列表:

http://php.net/manual/en/json.constants.php

  • 我刚刚在PHP 5.6中发现`JSON_UNESCAPED_SLASHES`适用于正斜杠但对反斜杠没有任何作用 (7认同)
  • 使用PHP 5.6.5,它不起作用:( (3认同)

Rij*_*ijk 28

json_encode($response, JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)

  • 对不起......这是"正确"的答案?JSON现在在各地使用,而不仅仅是在Javascript中......它只是一种序列化数据的方式.PHP通过添加完全超级转义到不应该有它们的引号来填补这个(以及其他许多东西)!DATA应该有转义,而不是包装数据的引号!并且在发生这种情况时,必须删除这些引号以使其正常工作,因为转义引号不是JSON的一部分.那么......一个人怎么做? (20认同)
  • JSON_UNESCAPED_SLASHES用于正斜杠,而不是引号.例如\ /这些\ /斜杠\ /是\ /\/目标 - 不是\"这些\"引号\"不是\"\"\"目标 (4认同)

Vuo*_*ngg 11

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

stripslashes(json_encode($array))
Run Code Online (Sandbox Code Playgroud)

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


Gen*_* S. 9

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

$str = preg_replace('/\\\"/',"\"", $str);
Run Code Online (Sandbox Code Playgroud)

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

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

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

$str = preg_replace('/\\\\\"/',"\"", $str);
Run Code Online (Sandbox Code Playgroud)

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

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


Hun*_*yDB 5

更简单的方法是

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);
Run Code Online (Sandbox Code Playgroud)


tot*_*tas 5

我只是想知道,json_encode\n在单引号内使用时,它才会逸出。

echo json_encode("Hello World\n");
// results in "Hello World\n"
Run Code Online (Sandbox Code Playgroud)

echo json_encode('Hello World\n');
// results in "Hello World\\\n"
Run Code Online (Sandbox Code Playgroud)