通过$ _POST处理textarea内容后保留多行

问题描述:

我创建了一个非常简单的PHP系统,使用MySQL数据库和PHP将邮件发送到邮件列表。它还没有完成,因为通过mail()函数发送的邮件马上进入大多数邮件程序的垃圾文件夹,我将来会使用PHP连接到我的SMTP服务器。尽管我想先解决一些问题。

<table border="0"> 
<form method="post" action="send.php"> 
<tr><td>Onderwerp:</td><td><input type="text" style="width:200px;" name="sub" /></td></tr> 
<tr><td>Bericht:</td><td><textarea name="mes" style="width:200px; height:100px;"></textarea></td></tr> 
<tr><td></td><td><input type="submit" style="width:200px;" value="Verzend" /></td></tr> 
</form> 
</table> 

当消息在上面textarea的它提交给下面的脚本(send.php)填充:

while($row = mysql_fetch_array($result)){ 
$to  = $row['email']; 
$subject = $_POST['sub']; 
$message = $_POST['mes']; 
$headers = 'From: [email protected]>' . "\r\n" . 'Reply-To: [email protected]' . "\r\n" . 'X-Mailer: PHP/' . phpversion() . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

mail($to, $subject, $message, $headers); 
} 

当然还有上面这一些脚本连接到数据库等等,但这不是相关的。正如你所看到的,通过$ _POST接收到的消息文本被放入mail()函数中使用的变量中。

但是,当我在textarea中使用多行时,脚本中的某个位置全部转换为一个巨大的行,最终会创建一个乱七八糟的邮件。正如你们中的一些人可能看到的,我已经创建了一个标题,表示邮件的内容是HTML。这是因为我在通过$ _POST发送的文本周围放置了一个<p>元素。我试图删除它,因为它可能是把它全部转换成一行的东西。但是这没有帮助。

当然,您可以在HTML中使用<br />,但如果要求列表中的所有用户使用它来创建新行,那将是愚蠢的。所以:有没有办法让电子邮件中的多行保留,而不必在文本框中填写任何不同的内容?

感谢您提前回答!

也许YPU正在寻找在PHP nl2br功能..

$message = nl2br($_POST['mes']); 
+0

谢谢!以下也是@xdazz。我以为我曾尝试nl2br()之前,它不工作。显然我做错了,因为它现在完美了!一个很短的答案长问题... – Stijn 2012-02-06 15:29:30

如果你的邮件内容是HTML,检查功能nl2br