我有一个由文本区域组成的非常简单的表单。文本区域中是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>
标记。在输出数据时执行此转换。