php json_encode没有逃避新行

san*_*uda 10 php json

我正面临着json_encode的一些问题.

当我json_encode一个有新行的数组时,它不会转换新行,而是删除\并保持n.

ex: $array = array('name'=> "some text \n\r text");
$results = json_encode($array);
Run Code Online (Sandbox Code Playgroud)

some text nr text在数据库中保存.

我正在使用php 5.3.8.

编辑:

这是我正在使用的原始代码

$attr = array();
for($i=0; $i < count($_POST['key']); $i++){
    $attr[$_POST['key'][$i]] = $_POST['value'][$i];
}
echo json_encode(array('custom' => $attr));
Run Code Online (Sandbox Code Playgroud)

这些POST价值来自形式.

Mad*_*iha 10

换行符不是JSON字符串中的有效字符.这是预期的行为:

烧焦

除"或\或控制字符"之外的任何Unicode字符

  • \"
  • \
  • /
  • \ b
  • \F
  • \n
  • \ r
  • \ t
  • \ u四个十六进制数字

JSON将这些控制字符转义为列表中的控制字符.

所以现在我们有'\n'(字面意思是反斜杠后跟'n'),如果没有正确转义,它将被保存在数据库中n.而就是你所遇到的问题.

解决方案

使用预准备语句正确转义数据库中存储的字符串中的任何和所有斜杠.这将保存它们'\n',您可以"\n"在检索数据时将其转换为.


Sea*_*son 9

我不相信 json_encode 是你的问题。我的猜测是您的数据库将 \ 解释为转义字符,因此它只是将它们删除。

为了解决这个问题,只需使用addslashes转义转义字符:

$results=addslashes($results);
Run Code Online (Sandbox Code Playgroud)


san*_*uda 0

我想通了这个问题。这不是 json_encode 问题。保存到数据库时出错。

问题是服务器中启用了magic_quotes_gpc。在我的应用程序中,如果启用了 magic_quotes,我将删除斜杠。

我禁用了magic_quotes_gpc。现在工作正常。

感谢每一个身体。