Как исправить «imap_utf8» не работает для тела письма в php imap - PullRequest
1 голос
/ 23 мая 2019

Я создал php-код, чтобы получать все новые письма из gmail, используя imap - также на иврите. Когда я пытаюсь использовать функцию imap_utf8, она работает только для субъекта, а не для тела. (Я также заметил, что объект имеет другую кодировку, чем тело)

Я много искал в сети, и не нашел никакого решения. (Я тоже новичок в php)

foreach($emails as $email_number) {
        $overview = imap_fetch_overview($inbox,$email_number,0);
        $message = imap_fetchbody($inbox,$email_number, 1);

        echo imap_utf8($overview[0]->subject);
        echo imap_utf8($message);
}

Я ожидаю вывод иврита для субъекта и тела, но работает только субъект.

например - если субъект «נושא», а тело «גוף», то результат будет следующим: «נושא» для предмета (и это здорово), 15LXldejDQo = для тела

(И закодированный код для субъекта: =? UTF-8? B? 16DXldep15A =? =)

Спасибо'S!

П.С .: Извините, если мой английский не очень хорош.

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Две функции немного отличаются.

  • base64_decode - декодирует данные, закодированные с помощью MIME base64
  • imap_utf8 - преобразует кодированный в MIME текст в UTF-8

Если вы когда-либо читаете только один RFC, Многоцелевые расширения почты Интернета один из них, который стоит рассмотреть.

<?php
$body = '15LXldejDQo=';

var_dump(base64_decode($body)); //output: גוף
var_dump(imap_utf8($body));     //output: 15LXldejDQo=

$subject = '=?UTF-8?B?16DXldep15A=?=';
var_dump(base64_decode($subject));  //output: Q1|^�^W^�^@
var_dump(imap_utf8($subject));      //output: נושא

В основном, для кодирования заголовка используется другая техника. Вы видите это в строке темы ... =?charset?encoding?encoded-text?=. B - для base64, Q - для печати с предварительными кавычками. Сообщение просто закодировано в base64, тип содержимого устанавливается заголовком Content-Type.

1 голос
/ 23 мая 2019

Итак, наконец, спасибо ficuscr , все работает!Ответ заключается в том, чтобы обернуть тело с помощью функции base64_decode, например:

$message = imap_fetchbody($inbox,$email_number, 1);
echo base64_decode($message);

Большое спасибо, ficuscr !

...