PHP Imap странные символы кодировки

0

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

=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?= 

На самом деле это должно выглядеть так (это латвийские символы, обычно доступные в utf8):

Darba sākšana ar Gmail

Я пытался:

utf8_encode(quoted_printable_decode(
   "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?="
));

И это дает мне следующее, что неверно:

=?ISO-8859-13?Q?Darba_sâkðana_ar_Gmail? 

Как мне это получить - Darba sākšana ar Gmail

Теги:
character-encoding
gmail
imap
encoding

2 ответа

1
Лучший ответ

Вы должны использовать функцию imap_mime_header_decode:

$text = "=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=";

$elements = imap_mime_header_decode($text);
foreach ($elements as $element) {
    echo "Charset: $element->charset\n";
    echo "Text: $element->text\n\n";
}

И вы можете использовать функцию iconv для преобразования:

iconv($element->charset, 'utf-8', $element->text);
  • 0
    ты спас мой день :) спасибо
0

Как ответил Петр, вам нужно использовать imap_mim_header_decode. Я предполагаю, что вы используете imap_headerinfo с fromaddress. Это то, что я сделал:

if (strpos($header->fromaddress,'?=')) {
    $wrong_charset = imap_mime_header_decode($header->fromaddress);

    $corrected_charset = '';

    for ($i=0; $i<count($value); $i++) {
        $corrected_charset .= "{$wrong_charset[$i]->text} ";
    }

}
else{
    $corrected_charset = $header->fromaddress;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню