【问题标题】:What's happening to new lines in my form textarea?我的表单文本区域中的新行发生了什么?
【发布时间】:2013-08-01 04:32:46
【问题描述】:

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

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

在服务器上,我像这样抓取消息文本区域的内容:

$content = $_POST['message'];

如果我回应这个:

echo $content;

文本在一行中。

如果我回应:

echo nl2br($content);

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

【问题讨论】:

  • 浏览器不支持换行/回车。它们被视为空间并被渲染。这就是 nl2br 起作用的原因。它将\n\r 字符替换为html <br> 标签。如果您在页面上完成了“查看源代码”,您会看到原始源代码确实包含换行符。永远不要相信你的浏览器显示的内容,因为它的工作就是对你撒谎。

标签: php forms


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 或者你可以输出pre标签内的文本或white-space:pre-line;样式的元素
猜你喜欢
  • 2012-12-22
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多