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;
}
?>iconv_mime_decode
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
iconv_mime_decode
Референца за `function.iconv-mime-decode.php` со подобрена типографија и навигација.
iconv_mime_decode
класата mysqli_driver
iconv_mime_decode — Декодира MIME Композира
= NULL
Декодира MIME поле на заглавието.
Параметри
string-
Кодираното заглавие, како стринг.
mode-
modeја одредува однесувањето во случај iconv_mime_decode() најде невалидноMIMEполе за заглавие. Можете да специфицирате каква било комбинација од следниве битни маски.Бит маски прифатливи за iconv_mime_decode() Име (константа) Константа = NULL 1 ICONV_MIME_DECODE_STRICT Ако е поставено, даденото заглавие се декодира во целосна согласност со стандардите дефинирани во Низа кодирана со MIME. Методот на кодирање MIME и спецификацијата UTF-8 се опишани во. Оваа опција е оневозможена по дифолт бидејќи има многу скршени агенти за пошта што не ја следат спецификацијата и не произведуваат правилни MIMEheaders.2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Ако е поставено, iconv_mime_decode_headers() се обидува да игнорира какви било граматички грешки и да продолжи со обработката на дадено заглавие. encoding-
Опционалниот
encodingпараметарот ја специфицира кодната страница за претставување на резултатот. Ако е изоставен илиnull, iconv.internal_encoding ќе се користи.
Вратени вредности
Враќа декодирано MIME Враќа кодиран false ако се случи грешка при декодирањето.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
encoding сега е null.
|
Примери
Пример #1 iconv_mime_decode() example
<?php
// This yields "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() Враќа декодирана низа, ако е можно конвертирана во UTF-8.
- imap_base64() - Декодирај MIME елементи на заглавјето
- imap_qprint() - Декодирај BASE64 кодиран текст
Белешки од корисници 3 белешки
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