Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : IMAP, POP3 and NNTP Functions : imap_mime_header_decode

imap_mime_header_decode

Decode MIME header elements (PHP 4, PHP 5)
array imap_mime_header_decode ( string text )

Example 1056. 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";
}
?>

The above example will output:

Charset: ISO-8859-1
Text: Keld Jørn Simonsen

Charset: default
Text:  <keld@example.com>

Code Examples / Notes » imap_mime_header_decode

hans

This is obvious, but nevertheless here is a "flat" version:
<?php
private function flatMimeDecode($string) {
$array = imap_mime_header_decode($string);
$str = "";
foreach ($array as $key => $part) {
$str .= $part->text;
}
return $str;
}
?>


mattias

This function does not code a-z 0-9 like the function posted by bandpay at hotmail dot com
function encode_iso88591($string) {
if( ereg("[^A-Za-z0-9\ ]", $string) ) {
$text = "=?iso-8859-1?q?";
for( $i = 0 ; $i < strlen($string) ; $i++ ) {
if( ereg("[^A-Za-z0-9]", $string[$i]) ) {
$text .= "=".dechex(ord($string[$i]));
} else {
$text .= $string[$i];
}
}
return $text."?=";
} else return $string;
}


diego nunes
The previous comment (from hans) seems to make no sense at all, since it will not change the encoding and possibly result in a "multiencoding" string (that the browser and anything else will be unable to render, of course).
   I use a little function to decode the whole header to a specified encoding. It is as follow:
<?php
//return supported encodings in lowercase.
function mb_list_lowerencodings() { $r=mb_list_encodings();
 for ($n=sizeOf($r); $n--; ) { $r[$n]=strtolower($r[$n]); } return $r;
}
//  Receive a string with a mail header and returns it
// decoded to a specified charset.
// If the charset specified into a piece of text from header
// isn't supported by "mb", the "fallbackCharset" will be
// used to try to decode it.
function decodeMimeString($mimeStr, $inputCharset='utf-8', $targetCharset='utf-8', $fallbackCharset='iso-8859-1') {
 $encodings=mb_list_lowerencodings();
 $inputCharset=strtolower($inputCharset);
 $targetCharset=strtolower($targetCharset);
 $fallbackCharset=strtolower($fallbackCharset);
 $decodedStr='';
 $mimeStrs=imap_mime_header_decode($mimeStr);
 for ($n=sizeOf($mimeStrs), $i=0; $i<$n; $i++) {
   $mimeStr=$mimeStrs[$i];
   $mimeStr->charset=strtolower($mimeStr->charset);
   if (($mimeStr == 'default' && $inputCharset == $targetCharset)
     || $mimStr->charset == $targetCharset) {
     $decodedStr.=$mimStr->text;
   } else {
     $decodedStr.=mb_convert_encoding(
       $mimeStr->text, $targetCharset,
       (in_array($mimeStr->charset, $encodings) ?
         $mimeStr->charset : $fallbackCharset)
       )
     );
   }
 } return $decodedStr;
}
?>
   Hope it helps.


cracker

In response to Sven dot Dickert at planb dot de: if you encounter problems with "=?utf-8?Q?" appearing in your headers, I found that simply using "imap_utf8($string)" decoded the "$string" properly and solved my problem perfectly.

hdlim

imap_mime_header_decode, utf-7 and utf-8 problem, i solved the problem using below function. note that iconv function for code converting.
you must replace "EUC-KR" as iconv parameter with charset you want such as "iso-8859-1".
function mime_decode($s) {
 $elements = imap_mime_header_decode($s);
 for($i = 0;$i < count($elements);$i++) {
   $charset = $elements[$i]->charset;
   $text =$elements[$i]->text;
   if(!strcasecmp($charset, "utf-8") ||
      !strcasecmp($charset, "utf-7"))
   {
     $text = iconv($charset, "EUC-KR", $text);
   }
   $decoded = $decoded . $text;
 }
 return $decoded;
}


charsyam

I wrote a simple ks_c_5601-1987(2byte)
encode
function encode_ksc5601( $string )
{
$encode = base64_encode( $string );
$text = "=?ks_c_5601-1987?B?";
$text = $text.$encode."?=";
return $text;
}


sven dot dickert

Beware! imap_mime_header_decode in 4.0.6 is _not_ RFC2047 conform. The string =?utf-7?Q?Petra_M+APw-ller?= will not converted into Petra Müller cause the charset utf7 is unknown.  Same goes to =?utf-8?Q?Petra_M=C3=BCller?= for charset utf8.

pawel tomicki
<?php
function decode_iso88591($string){
 if (strpos(strtolower($string), '=?iso-8859-1') === false) {
   return $string;
 }
 $string = explode('?', $string);
 return strtolower($string[2]) == 'q' ? quoted_printable_decode($string[3]) : base64_decode($string[3]);
}
?>


Change Language


Follow Navioo On Twitter
imap_8bit
imap_alerts
imap_append
imap_base64
imap_binary
imap_body
imap_bodystruct
imap_check
imap_clearflag_full
imap_close
imap_createmailbox
imap_delete
imap_deletemailbox
imap_errors
imap_expunge
imap_fetch_overview
imap_fetchbody
imap_fetchheader
imap_fetchstructure
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_renamemailbox
imap_reopen
imap_rfc822_parse_adrlist
imap_rfc822_parse_headers
imap_rfc822_write_address
imap_savebody
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
eXTReMe Tracker