php - PHP无效的引用可打印序列,来自Yahoo的格式错误的q编码
问题描述
我在从 Yahoo 帐户转发的电子邮件生成的 PHP 中遇到以下错误:
注意:未知:无效的引用打印序列:=?UTF-8?Q?ck-off with Weekly Sale up to 90% off (errflg=3) in Unknown on line 0
我花了几个小时研究这个问题,并决定在没有雅虎参与的情况下,在电子邮件中向自己发送完全相同的输出字符串。正确解码的原始 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 Forward: Fw: 一个很棒的星期一开球,每周促销高达 90%
Roundcube 设法解码正常和格式错误的文本,虽然我不确定如何和 25兆字节是有点多挖掘,我什至无法确定他们在哪里解码主题标头。
如何修复 Yahoo 格式错误的 q-encoding 版本?
<?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 的源代码来解码消息的解决方案。
我发布了代码和演示:
- 在这里你可以看到它
- 点击大播放按钮预览提取
- 转到代码选项卡以查看可用于项目的提取的 Roundcube 代码
由于您在示例中提到不使用类,因此我从 中提取了 Roundcube 的decode_mime_string()
函数,并从、和等中提取rube_mime
了一些东西。rcube_charset
$aliases
parse_charset()
convert()
至于从雅虎解码格式错误的文本:
=?UTF-8?Q?GOG_Forward =?UTF-8?Q?ck-off_with_Weekly_Sale_up_to_90%_off?=
进入这个:
GOG Forward: Fw: 一个很棒的星期一开球,每周促销高达 90%
不可能。里面没有足够的数据。例如,它缺少“A great Monday ki”。你有电子邮件地址的完整来源吗?
推荐阅读
- javascript - Three.js - 通过鼠标移动和点击创建/更新网格
- sql - 我可以将 select 语句中的列名更改为从存储过程传入的参数吗?
- mysql - 如何在mysql的同一个父表中获取子行
- jquery - Jquery Mobile 下拉格式问题
- javascript - document.getElementByClassName 不工作,但 document.getElementById 工作
- django - GeoDjango - LayerMapping:当前事务中发生错误。在“原子”块结束之前,您无法执行查询
- php - 使用动态变量的 PayPal 链式支付
- php - 当用户点击帖子时,为什么变量会在它应该改变之前发生变化?
- powershell - Powershell - 使用文件作为参数创建快捷方式
- angular2-forms - Angular 2 值更改