Как декодировать строки заголовков почты с их типом кодирования в них в PHP

Я создаю небольшой веб-почтовый клиент на PHP и заметил, что несколько тем и содержимого электронной почты выглядят следующим образом:

=?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?=

У кого-нибудь есть идеи по их расшифровке, чтобы они отображались правильно?


person Jon    schedule 27.04.2010    source источник


Ответы (3)


Это закодированное слово RFC 2047. Он декодируется функцией mb_decode_mimeheader.

person bobince    schedule 27.04.2010
comment
Меня указали здесь из-за возможного дублировать. Если вы используете IMAP, используйте вместо него imap_utf8(). - person Eugene van der Merwe; 28.01.2017

Это строка в кодировке MIME, которая в основном используется для заголовков. Вы можете найти множество библиотек, которые могут справиться с этим. Например, получите PEAR::mail и используйте эту функцию,

Mail_mimeDecode::_decodeHeader()
person ZZ Coder    schedule 27.04.2010

Это старый вопрос, но недавно я столкнулся с этой проблемой при разборе электронных писем. При печати информации заголовка с помощью функции 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_)_?=
)

However, the original subject was "field name - need at risk into the 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;
person AKS    schedule 28.03.2016