为什么在我的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标签。有人能告诉我如何解决这个问题吗?

此外,它忽略了中断标记,并且只在我留下一行空格时放置中断。对此有何想法?

+0

感谢您的意见!它效果很好! MIME和字符集是一个大问题,因为我注意到只有Phobis提到它,而Marc选择不提及它,但它工作不管? – zeckdude 2009-05-27 03:41:49

+0

如果您正在处理附件,通常只需要MIME版本。只有拥有国际字符或其他一些奇怪的字符集时,charset才是重要的,大多数用户的电子邮件客户端默认不会处理该字符集。包含它们是一种很好的做法,但我选择不为了简洁起见。 – 2009-05-27 04:12:01

如果这是一封电子邮件,则必须将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包,而不是普通邮件功能