文字

iconv_mime_encode

(PHP 5, PHP 7)

iconv_mime_encodeComposes a MIME header field

说明

string iconv_mime_encode ( string $field_name , string $field_value [, array $preferences = NULL ] )

Composes and returns a string that represents a valid MIME header field, which looks like the following:

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
In the above example, "Subject" is the field name and the portion that begins with "=?ISO-8859-1?..." is the field value.

参数

field_name

The field name.

field_value

The field value.

preferences

You can control the behaviour of iconv_mime_encode() by specifying an associative array that contains configuration items to the optional third parameter preferences. The items supported by iconv_mime_encode() are listed below. Note that item names are treated case-sensitive.

Configuration items supported by iconv_mime_encode()
Item Type Description Default value Example
scheme string Specifies the method to encode a field value by. The value of this item may be either "B" or "Q", where "B" stands for base64 encoding scheme and "Q" stands for quoted-printable encoding scheme. B B
input-charset string Specifies the character set in which the first parameter field_name and the second parameter field_value are presented. If not given, iconv_mime_encode() assumes those parameters are presented to it in the iconv.internal_encoding ini setting. iconv.internal_encoding ISO-8859-1
output-charset string Specifies the character set to use to compose the MIME header. iconv.internal_encoding UTF-8
line-length integer Specifies the maximum length of the header lines. The resulting header is "folded" to a set of multiple lines in case the resulting header field would be longer than the value of this parameter, according to » RFC2822 - Internet Message Format. If not given, the length will be limited to 76 characters. 76 996
line-break-chars string Specifies the sequence of characters to append to each line as an end-of-line sign when "folding" is performed on a long header field. If not given, this defaults to "\r\n" (CR LF). Note that this parameter is always treated as an ASCII string regardless of the value of input-charset. \r\n \n

返回值

Returns an encoded MIME field on success, or FALSE if an error occurs during the encoding.

范例

Example #1 iconv_mime_encode() example

<?php
$preferences 
= array(
    
"input-charset"  =>  "ISO-8859-1" ,
    
"output-charset"  =>  "UTF-8" ,
    
"line-length"  =>  76 ,
    
"line-break-chars"  =>  "\n"
);
$preferences [ "scheme" ] =  "Q" ;
// This yields "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="
echo  iconv_mime_encode ( "Subject" "Prüfung Prüfung" $preferences );

$preferences [ "scheme" ] =  "B" ;
// This yields "Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?="
echo  iconv_mime_encode ( "Subject" "Prüfung Prüfung" $preferences );
?>

参见

  • imap_binary() - Convert an 8bit string to a base64 string
  • mb_encode_mimeheader() - 为 MIME 头编码字符串
  • imap_8bit() - Convert an 8bit string to a quoted-printable string
  • quoted_printable_encode() - 将 8-bit 字符串转换成 quoted-printable 字符串

用户评论:

[#1] cedric at gn dot apc dot org [2012-03-13 15:54:12]

iconv_mime_encode() isn't directly suitable for encoding headers which include "specials" as described in RFC 1522 s4 & s5, for example 
<?php
$mimeprefs 
= array ("scheme" => "Q",
                    
"input-charset" => "utf-8",
                    
"output-charset" => "utf-8",
                    
"line-break-chars" => "\n");
$enc iconv_mime_encode('From',  '"R??al Nam??" <user@example.com>'$prefs);
?>

will wrongly attempt to encode the angle brackets.  To use the function in place of mb_encode_mimeheader(), instead you need to encode the words separately, removing the superfluous field name:

<?php
$encoded 
"From: \""preg_replace('/^:\s+/'''iconv_mime_encode(""$real$mimeprefs))."\" <$email>";
?>


Also, values of "line-length" greater than 76 would be illegal under RFC 1522 and resulting encoded words may not be recognised.  (Not tested, but 72 would be safer.)

[#2] markus AT birth MINUS online DOT de [2010-05-19 05:38:53]

Looks like this function suffers from the same bug as mb_encode_mime() with long strings of non us-ascii characters. The function then returns false. This applies for utf-8 to utf-8 "conversion".

<?php
$subject 
'???? ??????????? ??????: ????????? > ????????';

$prefs = array(
    
'scheme' => 'Q',
    
'input-charset' => 'UTF-8',
    
'output-charset' => 'UTF-8',
    
'line-length' => 76,
    
'line-break-chars' => "\r\n",
);

echo 
'Original: ' $subject PHP_EOL;
$enc iconv_mime_encode'Subject'$subject$prefs );
var_dump$enc );  // will show bool(false)
?>


As a workaround, you could explode() the value on spaces and encode each word separately. Then remove the "Subject: " in front of the resulting strings and join() them with "\r\n " (don't forget the SPACE after the \n) as separator.

上一篇: 下一篇: