格式化电子邮件的空格和换行符


Formatting Email Umlaut and Linebreaks

我只是在工作的邮件功能和有格式化它的问题。我想以HTML格式发送邮件。换行符应转换为换行符。目前我正在使用这些函数

$mail_filtered    = nl2br($mail_filtered);
$mail_filtered    = htmlspecialchars($mail_filtered);

如果我使用这个函数,小写字母会正确显示,但是换行符在邮件中显示为<br/>标记。邮件头看起来像这样:

"Content-Type: text/html", "Charset=utf-8"

我做错了什么?

如果您使用nl2br将HTML换行符添加到"物理"换行序列并随后应用htmlspecialchars,则您还将添加的<br />转换为&lt;br /&gt;,然后显示为<br />:

$str = "foo'nbar>baz";
var_dump(nl2br($str) === "foo<br />'nbar>baz");  // bool(true)
var_dump(htmlspecialchars(nl2br($str)) === "foo&lt;br /&gt;'nbar&gt;baz");  // bool(true)

反过来做,首先使用htmlspecialchars,然后使用nl2br:

var_dump(nl2br(htmlspecialchars($str)) === "foo<br />'nbar&gt;baz");  // bool(true)