我有一个用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');
结果:请提供您公司证书的更新副本。
我的个人电子邮件可以正常使用,所以有没有办法在Outlook主题中正确显示',或者我对它们的系统设置有什么异想天开?
答案 0 :(得分:0)
无论您使用哪种类型输入主题,都不会使用简单的撇号'
,而实际上几乎所有单字节编码和UTF8都具有相同的表示形式,而是使用了“花式”右单引号{{1} },在单字节编码和UTF-8之间的表示方式有所不同。
’
将转换为HTML实体,因为您是按字面意思告诉它的,而电子邮件标头不是HTML,因此它将显示为文字字符串mb_convert_encoding()
。除了UTF-8之外,唯一具有“智能引号”的字符集是Microsoft的cp1252,对于电子邮件标题,这仍然是错误的答案。
最简单的答案是:不要那样做。使用普通的撇号。每个人都讨厌使用“智能”引号。
更复杂的答案是,电子邮件标题必须必须是7位安全的“ ASCII”文本,而其他任何内容都需要额外的手工处理。理想情况下,您应该使用适当的电子邮件库来处理此问题,以及其他数十种烦人的烦恼,这些烦扰会使您的电子邮件变形并影响交付能力。
如果您对破坏理智并直接使用’
感到困惑,那么您将需要正确编码主题行并使用显式定义的字符集which you should be doing anyways 。例如:
mail()
输出:
$subject = 'Please provide an updated copy of your company’s certification';
var_dump(
sprintf('=?UTF-8?Q?%s?=', quoted_printable_encode($subject))
);