HTML发布会删除换行符

时间:2013-05-29 10:21:40

标签: html textarea

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

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

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

为什么会这样? 我用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>

2 个答案:

答案 0 :(得分:3)

浏览器忽略<textarea>标记内的第一个和最后一个换行符。这是因为如果你像这样编写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即可。

答案 1 :(得分:-2)

这应该这样做

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

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

nl2br php docs:http://php.net/manual/en/function.nl2br.php

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