php json_encode 不转义新行

新手上路,请多包涵

我在使用 json_encode 时遇到了一些问题。

当我对一个包含新行的数组进行 json_encode 时,它不会转义新行,而是删除 \ 并保留 n。

 ex: $array = array('name'=> "some text \n\r text");
$results = json_encode($array);

它正在数据库中保存 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));

这些 POST 从表单中获取的值。

原文由 sankar.suda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 719
2 个回答

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

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

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

感谢每一个人。

原文由 sankar.suda 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

字符

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

  • \”

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

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

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

解决方案

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

原文由 Madara‘s Ghost 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏