PHP使用换行符从textarea保存内容

时间:2016-09-16 10:03:35

标签: php mysql textarea newline

这可能真的很愚蠢,但我尝试用PHP将texarea中的内容保存到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-tags,那么在更新表之前,一切都很好,发生了什么?!

这很好用:

$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");

4 个答案:

答案 0 :(得分:0)

您可以尝试添加输入:

<pre></pre> 

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

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

nl2br也是一个很好的解决方案,可以根据自己的喜好使用。 还要确保为数据库列使用正确的配置。它应该是VARCHAR或TEXT。

答案 1 :(得分:0)

我认为您的问题是新行在传递到服务器之前会被删除。

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

答案 2 :(得分:0)

如果您使用跨多行传播的SQL命令,那么oedo的建议是最简单的:

INSERT INTO mytable (myfield) VALUES ('hi this is some text
and this is a linefeed.
and another');

我的情况是,最好将SQL语句全部放在一行,所以我发现CONCAT_WS()和CHAR()的组合对我有用。

INSERT INTO mytable (myfield) VALUES (CONCAT_WS(CHAR(10 using utf8), 'hi this is some text', 'and this is a linefeed.', 'and another'));

答案 3 :(得分:0)

我已经对Zebra进行了另一次研究(这次是源代码),正如之前评论中所提到的,这正是新行被删除的原因。 Zebra包的转义方法使用: http://php.net/manual/en/mysqli.real-escape-string.php

表示删除以下内容: NUL(ASCII 0),\ n,\ r,\,&#39;,&#34;和Control-Z。