文字

iconv_mime_decode

(PHP 5, PHP 7)

iconv_mime_decodeDecodes a MIME header field

说明

string iconv_mime_decode ( string $encoded_header [, int $mode = 0 [, string $charset = ini_get("iconv.internal_encoding") ]] )

Decodes a MIME header field.

参数

encoded_header

The encoded header, as a string.

mode

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.

Bitmasks acceptable to iconv_mime_decode()
Value Constant Description
1 ICONV_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.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR If set, iconv_mime_decode_headers() attempts to ignore any grammatical errors and continue to process a given header.
charset

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

返回值

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

范例

Example #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() - Decode MIME header elements
  • imap_base64() - Decode BASE64 encoded text
  • imap_qprint() - Convert a quoted-printable string to an 8 bit string

用户评论:

[#1] Dirk Becker [2013-07-26 09:46:57]

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($dataICONV_MIME_DECODE_CONTINUE_ON_ERROR"ISO-8859-15");

        if(
json_encode($resp) == 'null')
            
$resp utf8_encode($resp);

        return 
$resp;
    }

?>

[#2] koronci at aol dot com [2012-12-19 11:24:52]

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

[#3] dido dot sevilla at gmail dot com [2005-03-09 08:00:14]

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.

上一篇: 下一篇: