我已经花了半天多的时间 - 只是想让电子邮件主题看起来正常。但是当电子邮件登陆收件箱时,国际字符显示为HTML_Entities。
例如:TydzieńoJedność
显示为:Tydzień o Jedność
我已经为UTF-8的电子邮件编码:
$this->subject = "=?UTF-8?B?" . base64_encode($this->subject) . "?=";
当我收到电子邮件(Gmail)时,标题显示为:
Subject: =?UTF-8?B?VHlkemllJiMzMjQ7IG8gSmVkbm8mIzM0NzsmIzI2Mzs=?=
所以它似乎正确编码。但由于某种原因,Gmail仍会显示带有HTML_Entities的主题。
有什么想法吗?
请参阅代码:SMTP mail class
答案 0 :(得分:2)
$this->subject
是否是有效的UTF-8字符串?您使用的是UTF-8编码的.php文件(无BOM)吗?
另外,尝试:
$this->subject = "=?UTF-8?B?" . base64_encode(html_entity_decode($this->subject, ENT_COMPAT, 'UTF-8')) . "?=";
答案 1 :(得分:2)
如果是我,我会用
编码字符串$this->subject = mb_encode_mimeheader($this->subject);
使用TydzieńoJedność的示例字符串,这会产生编码输出
=?UTF-8?B?VHlkemllw4XChCBvIEplZG5vw4XCm8OEwoc=?=
您在问题中提供的主题标题解码为包含HTML实体:
echo mb_decode_mimeheader('=?UTF-8?B?VHlkemllJiMzMjQ7IG8gSmVkbm8mIzM0NzsmIzI2Mzs=?=');
给出字符串Tydzień o Jedność
。据推测,该字符串在base64编码之前已经过HTML编码。
答案 2 :(得分:1)
如果您有iconv可用,则可以尝试使用iconv_mime_encode()功能代替"=?UTF-8?B?" . base64_encode($this->subject) . "?=";