如何解决PHP无效的带引号的可打印序列,来自Yahoo
我从Yahoo帐户转发的电子邮件中遇到了PHP中的以下错误:
注意:未知:无效的带引号的可打印序列:=?UTF-8?Q?ck-off,每周销售最多可享受90%的折扣(errflg = 3),位于第0行的Unknown
我已经花了几个小时研究这个问题,并决定在没有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?=
来自Yahoo的格式错误的q编码文本:
=?UTF-8?Q?GOG_Forward =?UTF-8?Q?ck-off_with_Weekly_Sale_up_to_90%_off?=
解码时正确的字符串:
GOG前进:周二:?出色的周一开球,每周销售可享受高达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']);
?>
为澄清起见,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
解决方法
我创建了一个使用Roundcube的源代码对消息进行解码的解决方案。
You can test it here(点击顶部的运行)
由于您在示例中提到不使用类,因此我从rube_mime
中提取了Roundcube的decode_mime_string()
函数,并从rcube_charset
中提取了一些内容,例如$aliases
,{{ 1}}和parse_charset()
。
就从Yahoo解码格式错误的文本而言:
=?UTF-8?Q?GOG_Forward =?UTF-8?Q?ck-off_with_Weekly_Sale_up_to_90%_off?=
对此:
GOG前进:周二:?出色的周一开球,每周销售可享受高达90%的折扣
不可能。那里没有足够的数据。例如,它缺少“?A great Monday ki”。您有电子邮件地址的完整来源吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。