iconv_mime_decode

(PHP 5)

iconv_mime_decode --  Decodes a MIME header field

Description

string iconv_mime_decode ( string encoded_header [, int mode [, string charset]] )

Returns a decoded MIME field on success, or FALSE if an error occurs during the decoding.

mode determines the behaviour in the event iconv_mime_decode() encounters a malformed MIME header field. You can specify any combination of the following bitmasks.

表格 1. Bitmasks acceptable to iconv_mime_decode()

ValueConstantDescription
1ICONV_MIME_DECODE_STRICT If set, the given header is decoded in full conformance with the standards defined in RFC2047. This option is disabled by default because there are a lot of broken mail user agents that don't follow the specification and don't produce correct MIME headers.
2ICONV_MIME_DECODE_CONTINUE_ON_ERROR If set, iconv_mime_decode() attempts to continue to process the given header even though an error occurs.

The optional charset parameter specifies the character set to represent the result by. If omitted, iconv.internal_charset will be used.

例子 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");
?>

See also iconv_mime_decode_headers(), mb_decode_mimeheader(), imap_mime_header_decode(), imap_base64() and imap_qprint().


add a note add a note User Contributed Notes
dido dot sevilla at gmail dot com
10-Mar-2005 12:00
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.