imap_mime_header_decode
(PHP 4, PHP 5)
imap_mime_header_decode — Decode MIME header elements
Описание
Decodes MIME message header extensions that are non ASCII text (see » RFC2047).
Список параметров
- text
-
The MIME text
Возвращаемые значения
The decoded elements are returned in an array of objects, where each object has two properties, charset and text.
If the element hasn't been encoded, and in other words is in plain US-ASCII, the charset property of that element is set to default.
Примеры
Пример #1 imap_mime_header_decode() example
<?php
$text = "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@example.com>";
$elements = imap_mime_header_decode($text);
for ($i=0; $i<count($elements); $i++) {
echo "Charset: {$elements[$i]->charset}\n";
echo "Text: {$elements[$i]->text}\n\n";
}
?>
Результат выполнения данного примера:
Charset: ISO-8859-1 Text: Keld Jørn Simonsen Charset: default Text: <keld@example.com>
In the above example we would have two elements, whereas the first element had previously been encoded with ISO-8859-1, and the second element would be plain US-ASCII.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с почтой
- IMAP, POP3 и NNTP
- imap_8bit
- imap_alerts
- imap_append
- imap_base64
- imap_binary
- imap_body
- imap_bodystruct
- imap_check
- imap_clearflag_full
- imap_close
- imap_create
- imap_createmailbox
- imap_delete
- imap_deletemailbox
- imap_errors
- imap_expunge
- imap_fetch_overview
- imap_fetchbody
- imap_fetchheader
- imap_fetchmime
- imap_fetchstructure
- imap_fetchtext
- imap_gc
- imap_get_quota
- imap_get_quotaroot
- imap_getacl
- imap_getmailboxes
- imap_getsubscribed
- imap_header
- imap_headerinfo
- imap_headers
- imap_last_error
- imap_list
- imap_listmailbox
- imap_listscan
- imap_listsubscribed
- imap_lsub
- imap_mail_compose
- imap_mail_copy
- imap_mail_move
- imap_mail
- imap_mailboxmsginfo
- imap_mime_header_decode
- imap_msgno
- imap_num_msg
- imap_num_recent
- imap_open
- imap_ping
- imap_qprint
- imap_rename
- imap_renamemailbox
- imap_reopen
- imap_rfc822_parse_adrlist
- imap_rfc822_parse_headers
- imap_rfc822_write_address
- imap_savebody
- imap_scan
- imap_scanmailbox
- imap_search
- imap_set_quota
- imap_setacl
- imap_setflag_full
- imap_sort
- imap_status
- imap_subscribe
- imap_thread
- imap_timeout
- imap_uid
- imap_undelete
- imap_unsubscribe
- imap_utf7_decode
- imap_utf7_encode
- imap_utf8
Коментарии
A nice way to decode strings is to use the mb_list_encodings(), but I had two problems with it:
sometimes, the charset is uppercase in the header an lowercase in mb_list_encodings() and sometimes, the charset is not in the mb_list_encodings() list.
<?php
function upperListEncode() { //convert mb_list_encodings() to uppercase
$encodes=mb_list_encodings();
foreach ($encodes as $encode) $tencode[]=strtoupper($encode);
return $tencode;
}
function decode($string) {
$tabChaine=imap_mime_header_decode($string);
$texte='';
for ($i=0; $i<count($tabChaine); $i++) {
switch (strtoupper($tabChaine[$i]->charset)) { //convert charset to uppercase
case 'UTF-8': $texte.= $tabChaine[$i]->text; //utf8 is ok
break;
case 'DEFAULT': $texte.= $tabChaine[$i]->text; //no convert
break;
default: if (in_array(strtoupper($tabChaine[$i]->charset),upperListEncode())) //found in mb_list_encodings()
{$texte.= mb_convert_encoding($tabChaine[$i]->text,'UTF-8',$tabChaine[$i]->charset);}
else { //try to convert with iconv()
$ret = iconv($tabChaine[$i]->charset, "UTF-8", $tabChaine[$i]->text);
if (!$ret) $texte.=$tabChaine[$i]->text; //an error occurs (unknown charset)
else $texte.=$ret;
}
break;
}
}
return $texte;
}
?>