【问题标题】:PHP, SMTP - Subject in email shows International Characters as HTML_EntitiesPHP,SMTP - 电子邮件中的主题将国际字符显示为 HTML_Entities
【发布时间】:2011-01-18 17:29:05
【问题描述】:

我在这上面花了半天多的时间 - 只是想让电子邮件主题看起来正常。但是当电子邮件进入收件箱时,国际字符会显示为 HTML_Entities。

例如:Tydzień o Jedność

显示为: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

【问题讨论】:

标签: php email utf-8 smtp encode


【解决方案1】:

$this->subject 是有效的 UTF-8 字符串吗?您是否使用 UTF-8 编码的 .php 文件(无 BOM)?

另外,尝试做:

$this->subject = "=?UTF-8?B?" . base64_encode(html_entity_decode($this->subject, ENT_COMPAT, 'UTF-8')) . "?=";

【讨论】:

  • 问题是 - 我使用了一个名为 Simple Mailing List 的时事通讯邮件脚本。该表单是从缺少元字符集标记的 html 页面发送的。所以如果你输入了外来字符,当你点击提交时,数据到达php文件时就已经被打乱了。将设置为 UTF-8 的元字符集标记添加到具有修复此问题的表单的 html 页面。
【解决方案2】:

如果是我,我会将字符串编码为

$this->subject = mb_encode_mimeheader($this->subject);

使用您的 Tydzień o Jedność 示例字符串,生成编码输出

=?UTF-8?B?VHlkemllw4XChCBvIEplZG5vw4XCm8OEwoc=?=

您在问题中提供的主题标头会解码以包含 HTML 实体:

echo mb_decode_mimeheader('=?UTF-8?B?VHlkemllJiMzMjQ7IG8gSmVkbm8mIzM0NzsmIzI2Mzs=?=');

给出字符串Tydzień o Jedność。据推测,该字符串在进行 base64 编码之前已进行了 HTML 编码。

【讨论】:

    【解决方案3】:

    如果你有 iconv 可用,你可以尝试使用 iconv_mime_encode() 函数而不是 "=?UTF-8?B?" . base64_encode($this->subject) . "?=";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      相关资源
      最近更新 更多