【发布时间】:2014-09-12 02:33:34
【问题描述】:
因为我的电子邮件表单,我真的很生气。我有一个表单,访客可以在其中提交他们的问题。提交后的消息等会先存入数据库。存储成功后,将向我的电子邮件地址发送一封电子邮件。
一切顺利,除了消息部分。它一直显示 \r\n (这些换行符也存储在 db 中),而我试图 str_replaced() 用
甚至 ntblr() 它的 \r\n 。没有任何效果。我到底做错了什么?
获取消息内容:
$message = safe($mysqli,$_POST['message']);
safe()函数是:mysqli_real_escape_string
电子邮件代码:
if (!$stmt) {
echo "sendingEmailError";
} else {
//Send email
$to = "<my@email.com>";
$subject = "Website message from ".$account."";
$body = "
<div> ".nl2br($message)." </div>";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: New email from '.$account.' <'.$email.'>' . "\r\n";
mail($to, $subject, $body, $headers);
echo "sendingEmailSuccess";
}
\r\n 应替换为 <br />
【问题讨论】:
-
您是否确定您的文本包含换行符和回车符,或者这些字符是否以某种方式被破坏并且现在是
\、n、\、和r文字,例如\r\n作为回车/换行符是 2 个字节,\r\n作为文字字符反斜杠,r和n是 4 个字节。在任何情况下,您都不应该构建自己的 mime 电子邮件。使用 PHPMailer 或 Swiftmailer,这两者都可以让发送 html 电子邮件变得轻而易举。 -
您可以使用 PHP_EOL 代替 \r\n
-
PHP_EOL 在这种情况下是错误的,因为它可能是特定于操作系统的,而
\r\n在这里具有特殊的操作系统无关含义。 -
除了@MarcB 所说的,做一个
var_dump($body)并发布结果。 -
@user986959:毫无意义。 PHP_EOL 是本地机器的 eol 字符。如果服务器是 Unix 机器,那么 PHP_EOL 是
\n,并且不会匹配 Windows 机器提交的\r\n。
标签: php forms email html-email