PHP用换行符保存文本区的内容


PHP save content from textarea with newline

这可能真的很愚蠢,但我尝试用PHP将内容从文本区域保存到MySQL中。通常在数据库中保留换行符。但突然之间,它们被移除了。

我使用jquery通过ajax将值发送到PHP,然后我在PHP中执行此操作:

$var   = strip_tags( $_POST["var"] );
$db->query("UPDATE table SET var='$var' WHERE id=$id")

不知何故,在进入时丢失了换行符。如果我在var上执行nl2br,那么它们将被转换为<br/>,因此$var一直包含换行符,直到我运行查询。

更新,增加陌生感。如果我在$var上实际运行nl2br,然后用换行符替换br标记,在更新表之前,一切都很好,发生了什么?!

运行正常:

$var   = strip_tags( $_POST["var"] );
$var = nl2br($var);    
$var = preg_replace('#<br's*/?>#i', "'n", $var);
$db->query("UPDATE table SET var='$var' WHERE id=$id");

我又看了一下Zebra(这次是源代码),正如前面评论中提到的,这就是为什么要删除换行符。Zebra包的escape方法使用:http://php.net/manual/en/mysqli.real-escape-string.php

表示删除以下内容:空(ASCII 0), ' n ' r , ', ', ", 和Control-Z。

您可以尝试添加输入:

<pre></pre> 

这将把您的输入保存为数据库中预格式化的文本。

参考:https://www.w3.org/wiki/HTML/Elements/pre

nl2br也是一个很好的解决方案,使用您喜欢的任何一个。还要确保为数据库列使用了正确的配置。应该是VARCHAR或者TEXT

我认为你的问题是,换行被传递到服务器之前被删除。

你提到它是用jQuery发送的,所以确保在发送到服务器之前没有任何客户端处理。