PHP 无效的引用打印序列,来自雅虎的格式错误的 q 编码

Joh*_*ohn 3 php email decoding yahoo-mail

我在从 Yahoo 帐户转发的电子邮件生成的 PHP 中遇到以下错误:

注意:未知:无效的引用打印序列:=?UTF-8?Q?ck-off with Weekly Sale up to 90% off (errflg=3) in Unknown on line 0

我花了几个小时研究这个问题,并决定在电子邮件中向自己发送完全相同的输出字符串,而无需 Yahoo 参与。正确解码的原始 q 编码文本:

=?UTF-8?Q?GOG_Forward=3A_Fw=3A_=F0=9F=98=89_A_great_Monday_kick-?= =?UTF-8?Q?off_with_Weekly_Sale_up_to_90=25_off?=

来自雅虎的畸形 q 编码文本:

=?UTF-8?Q?GOG_Forward =?UTF-8?Q?ck-off_with_Weekly_Sale_up_to_90%_off?=

解码时的正确字符串:

GOG Forward:Fw:周一开球很棒,每周折扣高达 90%

Roundcube 设法解码正常和格式错误的文本,尽管我不确定如何和 25兆字节有点难以挖掘,我什至无法确定他们在哪里解码主题标题。

如何修复 Yahoo 格式错误的 q 编码版本?

<?php
//These fail:
echo imap_mime_header_decode($mail_message_headers['Subject']);
echo quoted_printable_decode($mail_message_headers['Subject']);
?>
Run Code Online (Sandbox Code Playgroud)

为了澄清起见, imap_fetchstructure页面澄清了4编码的值是Quoted-Printable/ ENCQUOTEDPRINTABLE


新发展

事实证明,由于某种原因,雅虎为同一个标题发送了两次主题,一个格式不正确,另一个没有。这是原始电子邮件Subject标题:

Subject: =?UTF-8?Q?GOG_Forward:_Fw:_=F0=9F=98=89_A_great_Monday_ki?=
 =?UTF-8?Q?ck-off_with_Weekly_Sale_up_to_90%_off?=
MIME-Version: 1.0
Run Code Online (Sandbox Code Playgroud)

Pat*_*azé 7

我创建了一个使用 Roundcube 的源代码来解码消息的解决方案。

我发布了代码和演示:

  • 你可以在这里看到它
  • 点击大播放按钮预览提取
  • 转到代码选项卡以查看可用于项目的提取的 Roundcube 代码

既然你提到的例子中没有使用类我提取Roundcube的decode_mime_string()从功能rube_mime,从几件事情rcube_charset,如$aliasesparse_charset()convert()


至于解码来自雅虎的格式错误的文本:

=?UTF-8?Q?GOG_Forward =?UTF-8?Q?ck-off_with_Weekly_Sale_up_to_90%_off?=

进入这个:

GOG Forward:Fw:周一开球很棒,每周折扣高达 90%

不可能。里面没有足够的数据。例如,它缺少“伟大的星期一 ki”。你有电子邮件地址的完整来源吗?