Я создаю небольшой, основанный на сети почтовый клиент на 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?=
Есть ли у кого-нибудь идеи для их декодирования, чтобы они отображались правильно?
Это кодированное слово RFC 2047 . Он декодируется функцией mb_decode_mimeheader
.
Это строка, закодированная в MIME, в основном используемая для заголовков. Вы можете найти множество библиотек, которые могут справиться с этим. Например, получите PEAR :: mail и используйте эту функцию,
Mail_mimeDecode::_decodeHeader()
Это старый вопрос, но недавно я столкнулся с этой проблемой при разборе писем. При печати информации заголовка с помощью функции 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;