为什么在我的PHP字符串中显示html标签?
问题描述:
我正在使用一个邮件函数发送一个包含在变量$ body中的消息。我想用一些粗体字和一些中断标签将信息发送给我自己。为什么在我的PHP字符串中显示html标签?
这里是我的代码(定界符):
$body = <<<CTS
<h1><b>Order for $name on datevariable</b></h1><br /><br />
<b><u>Administrative Details</u></b><br />
<b>Employee ID:</b> $id<br />
<b>Cost Center:</b> $cost_center<br />
<b>Approved By:</b> $approved_by<br />
<b>Delivery Bldg:</b> $delivery_bldg<br />
<b>Delivery Contact Email:</b> $delivery_contact<br />
<b>Ext:</b> $del_contact_ext<br />
CTS;
出于某种原因,当我收到的电子邮件,它看起来像这样:
<h1><b>Order for James Important on datevariable</b></h1><br /><br />
<b><u>Administrative Details</u></b><br />
<b>Employee ID:</b> 213123<br />
<b>Cost Center:</b> 132123<br />
<b>Approved By:</b> Chris Seckla<br />
<b>Delivery Bldg:</b> 6<br />
<b>Delivery Contact Email:</b> [email protected]<br />
<b>Ext:</b> 56<br />
它填补了变量值,但对于一些原因忽略了html标签。有人能告诉我如何解决这个问题吗?
此外,它忽略了中断标记,并且只在我留下一行空格时放置中断。对此有何想法?
答
如果这是一封电子邮件,则必须将mime类型设置为text/html而不是text/plain。否则,您的电子邮件阅读器会将该邮件解释为纯文本并忽略所有的html标签。
例如,假设你调用的函数mail
像这样:
mail($to, $subject, $message, $headers)
在$headers
,你需要沿着这些路线的东西(调整你的具体情况,当然):
$headers = "From: [email protected]\r\n";
$headers .= "Reply-To: [email protected]\r\n";
$headers .= "Content-Type: text/html";
如果您想发送纯文本和html电子邮件(所以非html阅读器可以看到没有所有这些标签的干净版本的电子邮件),我会建议看看this教程以获得更详细的说明多部分电子邮件的国家。
答
你必须设置从PHP时发送的电子邮件使用HTML格式来显示一个额外的头:
的Content-Type:text/html的; charset = whatever
答
确保您发送声明它是HTML的标题...
例如:
mail('[email protected]', 'Subject',
'<html><body><b>Hello</b></body></html>',
"To: The Receiver <[email protected]>\n" .
"From: The Sender <[email protected]>\n" .
"MIME-Version: 1.0\n" .
"Content-type: text/html; charset=iso-8859-1");
答
如果你想用PHP发送邮件,我会建议你使用PEAR Mail_Mime包,而不是普通邮件功能
感谢您的意见!它效果很好! MIME和字符集是一个大问题,因为我注意到只有Phobis提到它,而Marc选择不提及它,但它工作不管? – zeckdude 2009-05-27 03:41:49
如果您正在处理附件,通常只需要MIME版本。只有拥有国际字符或其他一些奇怪的字符集时,charset才是重要的,大多数用户的电子邮件客户端默认不会处理该字符集。包含它们是一种很好的做法,但我选择不为了简洁起见。 – 2009-05-27 04:12:01