iconv_mime_encode()
(PHP 5, PHP 7)
Composes aMIMEheader field
说明
iconv_mime_encode(string $field_name,string $field_value[,array $preferences= NULL
]): string
Composes and returns a string that represents a validMIMEheader field, which looks like the following:
Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
参数
- $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 forbase64encoding scheme and "Q" stands forquoted-printableencoding scheme. B B input-charset string Specifies the character set in which the first parameter$field_nameand the second parameter$field_valueare 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 theMIMEheader. 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 "rn"(CRLF). Note that this parameter is always treated as an ASCII string regardless of the value ofinput-charset. rn n
返回值
Returns an encodedMIMEfield on success, or FALSE
if an error occurs during the encoding.
范例
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 stringmb_encode_mimeheader()
为 MIME 头编码字符串imap_8bit()
Convert an 8bit string to a quoted-printable stringquoted_printable_encode()
将 8-bit 字符串转换成 quoted-printable 字符串
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.)
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.