PHP 使用换行符保存 textarea 中的内容

PHP save content from textarea with 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 包含换行符直到我 运行 查询。

更新,增加陌生感。如果我实际上 运行 nl2br on $var,然后用换行符替换 br-tags,在更新 table 之前,一切都很好,这是怎么回事?!?

这工作正常:

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

您可以尝试将输入添加到:

<pre></pre> 

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

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

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

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

您提到它是通过 jQuery 发送的,因此请确保在发送到服务器之前没有任何客户端处理。

我又看了一遍 Zebra(这次是源代码),正如之前评论中提到的,这正是换行符被删除的原因。 Zebra 包中的转义方法使用: http://php.net/manual/en/mysqli.real-escape-string.php

这意味着删除了以下内容: NUL (ASCII 0)、\n、\r、\、'、" 和 Control-Z。