我有一个非常简单的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>
答案 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