iconv_mime_decode

(PHP 5, PHP 7, PHP 8)

iconv_mime_decodeДекодирует поле MIME-заголовка

Описание

iconv_mime_decode(string $string, int $mode = 0, ?string $encoding = null): string|false

Декодирует поле MIME-заголовка.

Список параметров

string

Закодированный заголовок в виде строки.

mode

mode задаёт режим поведения функции в случае, когда iconv_mime_decode() определит, что MIME-заголовок имеет недопустимую структуру. Режим задаётся комбинацией следующих битовых масок.

Битовые маски, применяемые в iconv_mime_decode()
Значение Константа Описание
1 ICONV_MIME_DECODE_STRICT Если задано, заголовок декодируется в полном соответствии со стандартом » RFC2047. Эта опция отключена по умолчанию, так как существует множество почтовых программ, которые не следуют спецификации и формируют некорректные с точки зрения стандарта MIME-заголовки.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Если задано, iconv_mime_decode_headers() будет пытаться пропускать грамматические ошибки и продолжать обработку заголовка.

encoding

Необязательный аргумент encoding задаёт набор символов, в котором будет представлен результат. Если аргумент опущен, будет использоваться iconv.internal_encoding.

Возвращаемые значения

Возвращает декодированный MIME-заголовок в случае успешного выполнения или false в случае возникновения ошибки.

Список изменений

Версия Описание
8.0.0 encoding теперь допускает значение null.

Примеры

Пример #1 Пример использования iconv_mime_decode()

<?php
// Выдаст в результате "Subject: Prüfung Prüfung"
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=",
0, "ISO-8859-1");
?>

Смотрите также

Добавить

Примечания пользователей 3 notes

up
3
Dirk Becker
12 years ago
While creating a new webmailer, I had to coop with a lot of mails and only half of them were correct encoded!Often the text is tagged as ISO but in real its UTF :/After trying a lot of solutions and combination a found a way which seems to work for all our mails. Maybe its usefull to someone else too.<?php    function mime_encode($data)    {        $resp = imap_utf8(trim($data));        if(preg_match("/=\?/", $resp))            $resp = iconv_mime_decode($data, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "ISO-8859-15");        if(json_encode($resp) == 'null')            $resp = utf8_encode($resp);        return $resp;    }?>
up
1
koronci at aol dot com
12 years ago
A simple and working solution for latin encoding supports Slovak, Czech, Russian ect. 
<?php iconv("utf-8", "windows-1250", $SomeWeirdText); ?>

specially for those who strugle with imap_mime_header_decode
up
1
dido dot sevilla at gmail dot com
20 years ago
In PHP versions that have imap_mime_decode built in, it's possible to emulate the operation of this function:<?phpfunction iconv_mime_decode($str, $mode=0, $charset="UTF-8"){    $data = imap_mime_header_decode($str);    if (count($data) > 0) {      // because iconv doesn't like the 'default' for charset      $charset = ($data[0]->charset == 'default') ? 'ASCII' : $data[0]->charset;      return(iconv($charset, $charset, $data[0]->text));    }    return(""); }?>I've only tried to use this code snippet to decode ISO-2022-JP messages to UTF-8, but I see no reason why it shouldn't work in other cases.
To Top