多亏了 SO,我能够避免编写自己的函数来解码引用的可打印电子邮件,而是使用 PHP 的decode_quoted_printable()
函数,从而节省了一些时间。
但是,我很快就遇到了问题。我有一封退回通知电子邮件,我需要对其进行解码并在浏览器中显示,并且电子邮件的正文包含原始电子邮件标头,其中包括原始源地址,该地址经过 VERP 编码,以便我可以将退回与数据库中对应的用户。
退回通知电子邮件的正文包括以下代码段:
------ This is a copy of the message, including all the headers. ------
Return-path: <blah+user=af.com@mydomain.com>
问题是quoted_printable_decode()
使用 '=' 字符作为特殊字符来表示它可能必须进行一些特殊解码。在 '=af' (\x3D6166) 的情况下,它决定将其转换为 \xAF,这是 Macron 字符的 Unicode 代码点。当我稍后运行它时,htmlentities()
它会转换为 Macron 字符的适当 HTML 代码,所以我最终在浏览器中得到以下输出:
返回路径:<blah+user¯.com@mydomain.com>
当然,并非所有以 '=' 开头的序列都会发生这种情况,只有 PHP 认为它可以转换为有意义的 Unicode 代码点的序列才会发生这种情况。替代方案imap_qprint()
表现出相同的行为。
哦,我正在运行 PHP 5.3.8。
我做错了什么还是这只是quoted_printable_decode()
应该如何工作?