【问题标题】:’ in PHP is converting to ’ when using mb_convert_encoding in Outlook subject在 Outlook 主题中使用 mb_convert_encoding 时,PHP 中的“正在转换为”
【发布时间】:2019-07-28 14:56:32
【问题描述】:

我在 PHP 中设置了一个 mail() 函数,当我通过电子邮件发送到我的电子邮件进行测试时,我注意到主题正在将我的 ' 转换为 '。

$subject="Please provide an updated copy of your company's certification";

结果:请提供贵公司认证的更新副本。

我跟着 Getting ’ instead of an apostrophe(') in PHP 添加了 mb_convert_encoding 但现在我得到的是 &rsquo 而不是 '。

$subjectBad="Please provide an updated copy of your company's certification";
$subject= mb_convert_encoding($subjectBad, "HTML-ENTITIES", 'UTF-8');

结果:请提供贵公司认证的更新副本。

我的个人电子邮件很好,所以有没有办法在 Outlooks 主题中正确显示 ' 或者我是否随心所欲地考虑他们的系统设置?

【问题讨论】:

标签: php unicode utf-8 outlook


【解决方案1】:

无论您用于键入主题的内容,都没有使用简单的撇号 ',它在几乎所有单字节编码和 UTF8 中都有一个共同的表示,而是使用了一个“花哨的”右单引号 ,即单字节编码和 UTF-8 之间的表示方式不同。

mb_convert_encoding() 正在转换为 HTML 实体,因为您实际上是在告诉它,并且电子邮件标题不是 HTML,因此它将显示为文字字符串 ’。除了 UTF-8 之外,唯一具有“智能引号”的字符集是 Microsoft 的 cp1252,这仍然是电子邮件标头的错误答案。

最简单的答案是:不要那样做。使用正常的撇号。每个人都讨厌处理“聪明”的引语。

更复杂的答案是电子邮件标题必须是 7 位安全的“ASCII”文本,其他任何内容都需要额外的手动操作。理想情况下,您应该使用适当的电子邮件库来处理此问题,以及许多其他会导致您的电子邮件格式错误并影响送达率的烦恼。

如果您一心想破坏您的理智并直接使用mail(),那么您将需要正确编码您的主题行并使用明确定义的字符集which you should be doing anyways。例如:

$subject = 'Please provide an updated copy of your company’s certification';

var_dump(
    sprintf('=?UTF-8?Q?%s?=', quoted_printable_encode($subject))
);

输出:

string(82) "=?UTF-8?Q?Please provide an updated copy of your company=E2=80=99s certification?="

【讨论】:

猜你喜欢
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2016-03-06
相关资源
最近更新 更多