Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Кодировка имен вложений при получении почты


Автор: Rusman 27.12.2013, 17:22
Здравствуйте! Получаю письма через функцию imap_open
При разборе вложений получаем следующую структуру (Имя файла на кириллице в непонятном виде):

stdClass Object
(
    [type] => 3
    [encoding] => 3
    [ifsubtype] => 1
    [subtype] => VND.MS-OFFICE
    [ifdescription] => 0
    [ifid] => 0
    [bytes] => 1212792
    [ifdisposition] => 1
    [disposition] => attachment
    [ifdparameters] => 1
    [dparameters] => Array
        (
            [0] => stdClass Object
                (
                    [attribute] => filename
                    [value] => =?UTF-8?Q?=D0=9F=D1=80=D0=B0=D0=B9=D1=81-=D0=BB=D0=B8=D1=81=D1=82_=D0=B5=D0=B2=D1=80=D0=BE=D0=BF=D0=B0_26.12_(1).xls?=
                )

        )

    [ifparameters] => 1
    [parameters] => Array
        (
            [0] => stdClass Object
                (
                    [attribute] => name
                    [value] => =?UTF-8?Q?=D0=9F=D1=80=D0=B0=D0=B9=D1=81-=D0=BB=D0=B8=D1=81=D1=82_=D0=B5=D0=B2=D1=80=D0=BE=D0=BF=D0=B0_26.12_(1).xls?=
                )

        )

)

Код:

Код

$connect  = imap_open("{imap.mail.ru:143/imap}", "***", "***");

if ($connect == false)
    die('Не могу подключиться');
else
    echo 'Подключение удачное';

$listMail = imap_search ($connect,"UNSEEN",SE_UID );

if (!empty($listMail)):
    foreach ($listMail as $idMail):
    $head = imap_header($connect,$idMail);
    $fetches = imap_fetchstructure ($connect,$idMail);
        if (count($fetches)>0) {
            foreach ($fetches->parts as $part=>$fetch) {
                echo '<pre>';
                print_r($fetch);
                echo '</pre>';

            }
        }

    endforeach;
else:
    echo 'Нет писем';
endif;


Пожалуйста, подскажите как получить имена на русском языке, либо перевести данную строку в нормальный вид.

Всем заранее спасибо! 

Автор: AVA12 27.12.2013, 20:18
Дык, тут же все очевидно из формата: строка в UTF-8 в виде quoted printable, завернутая в mime-кодированное слово. Если не хочется читать RFC, то просто скорми такую строку функции mb_decode_mimeheader() - и на выходе получишь исходную строку в рабочей кодировке.

Автор: Rusman 27.12.2013, 20:34
AVA12, если использую функцию mb_decode_mimeheader, на выходе русские буквы в виде "????????????"

Автор: AVA12 27.12.2013, 20:53
Тебе префикс mb_ и словосочетание "рабочая кодировка" ни о чем не говорят?

Автор: Rusman 27.12.2013, 21:02
AVA12, разобрался, большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)