【问题标题】:How do I decode mail header strings with their encoding type in them in PHP如何在 PHP 中使用其编码类型解码邮件标头字符串
【发布时间】:2011-02-12 22:15:08
【问题描述】:

我正在用 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?=

有人对解码它们有什么想法吗?

【问题讨论】:

    标签: php utf-8 iso-8859-1 decoding


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      这是一个RFC 2047 编码字。由mb_decode_mimeheader函数解码。

      【讨论】:

      • 我被指向这里是因为可能是duplicate。如果您使用的是 IMAP,请改用 imap_utf8()
      【解决方案3】:

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

      Mail_mimeDecode::_decodeHeader()
      

      【讨论】:

        猜你喜欢
        • 2012-08-24
        • 2012-11-05
        • 2013-04-01
        • 1970-01-01
        • 2011-11-21
        • 2012-05-27
        • 1970-01-01
        • 2017-08-17
        相关资源
        最近更新 更多