• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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
    
    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()
    ItemTypeDescriptionDefault valueExample
    schemestring 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.BB
    input-charsetstring 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_encodingISO-8859-1
    output-charsetstring Specifies the character set to use to compose theMIMEheader.iconv.internal_encodingUTF-8
    line-lengthinteger 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.76996
    line-break-charsstring 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.rnn

    返回值

    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);
    ?>
    

    参见

    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.