iconv_mime_encode
(PHP 5, PHP 7, PHP 8)
iconv_mime_encode — Composes a MIME
header field
说明
$field_name
, string $field_value
, array $options
= []): string|false
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
参数
-
field_name
-
The field name.
-
field_value
-
The field value.
-
options
-
You can control the behaviour of iconv_mime_encode() by specifying an associative array that contains configuration items to the optional third parameter
options
. 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 forquoted-printable
encoding scheme.B B input-charset string Specifies the character set in which the first parameter field_name
and the second parameterfield_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 int 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 ofinput-charset
.\r\n \n
返回值
Returns an encoded MIME
field on success,
or false
if an error occurs during the encoding.
范例
示例 #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 字符串

User Contributed Notes 3 notes
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.)
From mail(): Lines should not belarger than 70 characters. Not 76 and not 72!
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.
备份地址:http://www.lvesu.com/blog/php/function.iconv-mime-encode.php