【问题标题】:HTML posting removes line breaksHTML 发布删除换行符
【发布时间】:2013-05-29 10:21:40
【问题描述】:

我有一个非常简单的 html / php 代码。它只有一个文本区域和一个发送按钮。

在文本区域中,我有一个文本,在文本的开头有 3 个新行。我需要那些换行符。

之后,当我提交表单时,由于某种原因,它是文本开头的换行符的第 1 章。当我再次发送它时,它会再次发送,删除换行符,而内容的开头不是文本。

为什么会这样? 我用 FF、Chrome、Safari、Oprea、IE 试了一下,结果都一样。

您可以使用以下代码对其进行测试:

<?php
if (empty($_POST["operation"])) {
    //Init the textarea value if form not submitted
    $_POST["message"] = "\r\n\r\n\r\nThis is\r\na multiline text";
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Multiline test</title>
    <meta charset="UTF-8" />
</head>
<body>
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
    <textarea style="width: 200px; height: 150px;" name="message"><?php echo $_POST["message"]; ?></textarea>
    <input type="submit" value="send" />
    <input type="hidden" name="operation" value="send" />
    </form>
</body>

【问题讨论】:

  • 如果可能的话,您应该考虑使用 CSS 来定位消息。这可能也会更容易。
  • 当换行符之前的第一个字符是 f.e. 时不会发生这种情况。空间。我不知道为什么会发生这种情况,并且在快速查看后无法在 HTML 规范中找到任何信息。您可以通过编写将 textarea 填充到下一行开头的 PHP echo 语句来防止这种情况发生。
  • css 不是一个选项。这是一个模块,当您想回复消息时。我想添加 3 行来分隔引用的消息。
  • 如果没有任何帮助,我会添加一个额外的空间,但这对我来说是难以置信的。我发布了 3 个换行符,我想取回 3 个换行符。也许这是一个 apache 问题?
  • @lolka_bolka 不。浏览器就是这样工作的。

标签: html textarea


【解决方案1】:

浏览器会忽略&lt;textarea&gt; 标记内的第一个和最后一个换行符。这是因为如果你不想要任何额外的换行符,如果你像这样编写 HTML:

<textarea>
Textarea content, all in one line.
</textarea>

在这种情况下,简单的解决方案是在打印 textarea 内容之前添加一个换行符。

<textarea style="width: 200px; height: 150px;" name="message">
<?php echo $_POST["message"]; ?>
</textarea>

另请注意,您不需要\r\n。只需\n 就足够了。

【讨论】:

    【解决方案2】:

    应该这样做

    <?php echo nl2br($_POST["message"]); ?>
    

    请注意对 $_POST 变量的 XSS 攻击。

    nl2br php 文档:http://php.net/manual/en/function.nl2br.php

    xss 备忘单:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多