iconv_mime_decode
(PHP 5)
iconv_mime_decode — Декодирует поле MIME-заголовка
Описание
$encoded_header
[, int $mode
= 0
[, string $charset
= ini_get("iconv.internal_encoding")
]] )Декодирует поле MIME-заголовка.
Список параметров
-
encoded_header
-
Закодированный заголовок в виде строки.
-
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() будет пытаться пропускать грамматические ошибки и продолжать обработку заголовка. -
charset
-
Необязательный аргумент
charset
задает набор символов, в котором будет представлен результат. Если аргумент опущен, будет использоваться iconv.internal_encoding.
Возвращаемые значения
Возвращает декодированный MIME-заголовок в случае успеха
или FALSE
в случае ошибки.
Примеры
Пример #1 Пример использования iconv_mime_decode()
<?php
// Выдаст в результате "Subject: Prüfung Prüfung"
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=",
0, "ISO-8859-1");
?>
Смотрите также
- iconv_mime_decode_headers() - Декодирует несколько полей заголовка MIME
- mb_decode_mimeheader() - Декодирует строку в MIME-заголовке
- imap_mime_header_decode() - Decode MIME header elements
- imap_base64() - Decode BASE64 encoded text
- imap_qprint() - Convert a quoted-printable string to an 8 bit string
Коментарии
In PHP versions that have imap_mime_decode built in, it's possible to emulate the operation of this function:
<?php
function 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.
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
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;
}
?>