PHP: imap_mime_header_decode - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

imap_msgno imap_mailboxmsginfo

Last updated: Sat, 27 Jan 2007

view this page in

# imap_mime_header_decode

(PHP 3 >= 3.0.17, PHP 4, PHP 5)

imap_mime_header_decode -- Decode MIME header elements

## Описание

array imap_mime_header_decode ( string text )

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.

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

imap_utf8()

add a note User Contributed Notes
imap_mime_header_decode
diego nunes <dn at nospam dot dnunes dot com>
14-Dec-2006 10:12
`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.`
hans at lintoo dot dk
22-Dec-2005 06:10
`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;
}
?>`
cracker at bigcracker dot ca
22-Feb-2005 04:55
`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.`
Pawel Tomicki <pafka at klub dot chip dot pl>
22-Apr-2004 11:04
`<?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]);
}
?>`
mattias at forss dot se
26-Nov-2003 07:45
`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;
}`
hdlim at kis21 dot com
01-Jan-2003 10:35
`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;
}`
Sven dot Dickert at planb dot de
16-May-2002 06:31
`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.`
charsyam at liso dot cs dot pusan dot ac dot kr
13-Aug-2001 08:34
`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;
}`
add a note
imap_msgno imap_mailboxmsginfo

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 09:32:46 2007 PST