如何在PHP中解码带有编码类型的邮件头字符串

3

我正在用PHP创建一个小型的基于Web的邮件客户端,并注意到一些电子邮件主题和内容如下:

=?ISO-8859-1?Q?Everything_for_=A35_-_Box_Sets,_Games_?= =?ISO-8859-1?Q?and_CD_Soundtracks...hurry,_ends_soon?=
=?utf-8?B?UGxheS5jb206IE9uZSBEYXkgT25seSDigJMgT3V0IG9mIHRoaXMgV29ybGQgRGVhbHMh?=
=?windows-1252?Q?Jon,_delivery_on_us_&_earn_=A35_credit_or_50_prints?=

有没有人能想出一些解码方法,使它们正确显示?
3个回答

4

这是一个RFC 2047编码的单词。它可以通过mb_decode_mimeheader函数进行解码。


我被指向这里,因为可能存在重复。如果您正在使用IMAP,则请改用imap_utf8() - Eugene van der Merwe

2

这是主要用于头部的MIME编码字符串。您可以找到许多可以处理此类编码的库。例如,获取PEAR::mail并使用此函数:

Mail_mimeDecode::_decodeHeader()

1
这是一个老问题,但最近在解析电子邮件时遇到了此问题。 使用函数imap_header_info打印头信息时,将显示以下数组:
stdClass Object
(
    [subject] => =?Windows-1252?Q?field_name_-_need___`at_risk=92____into_t?= =?Windows-1252?Q?he_label_(_some_content_to_)_?=
)

然而,原始主题是“字段名称-需要将风险转化为标签(一些内容)”
为了解决这个问题,必须在循环中使用函数imap_mime_header_decode来生成正确的文本。
$header = imap_headerinfo($email_obj, $email_ref_number, 0);
$elements = imap_mime_header_decode($header->subject);
$email_subject = '';
if ( ! empty($elements)) {
    foreach ($elements AS $e_part) {
        if (isset($e_part->text)) {
            $email_subject .= $e_part->text;
        }
    }
}
echo $email_subject;

这应该是正确的答案。mb_decode_mimeheader不能正确处理下划线并将其替换为空格。 - clarkk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接