5

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

在 textarea 中,我有一个文本,在文本的开头有 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>

4

2 回答 2

4

<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了。

于 2013-05-29T10:49:24.077 回答
-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

于 2013-05-29T10:28:41.583 回答