这可能真的很愚蠢,但我尝试用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");
答案 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。