什么';It’我的表单文本区域中出现了新行


What's happening to new lines in my form textarea?

我有一个由文本区域组成的非常简单的表单。文本区域中是MarkDown语法,我想将其保存到数据库中。显然,保留任何回车/换行都非常重要。

不过,当提交表单时,换行符似乎不会发送到服务器,除非我使用nl2br()PHP函数。

在服务器上,我获取消息文本区域的内容,如下所示:

$content = $_POST['message'];

如果我用对此进行回应

echo $content;

文本在一长行上。

如果我用回声

echo nl2br($content);

它按预期显示内容。为什么会这样?我假设,如果我只是将$content的值保存到我的数据库中,那么换行符将被保留?

浏览器将换行符提交为LF字符(='n)。

如果您输出这些,浏览器将不会显示它们,因为它在正常的HTML呈现模式中会忽略换行符。只有当您将它们转换为<br>标记时,浏览器才会识别它们。

尝试将内容类型设置为text/plain,您会看到浏览器也会呈现换行符:

header('Content-type: text/plain');
echo $content;

将未格式化的数据保存到数据库中,即不要将其转换为<br>标记。在输出数据时执行此转换。