update pague now
PHP 8.5.2 Released!

iconv_mime_encode

(PHP 5, PHP 7, PHP 8)

iconv_mime_encode Composes a MIME header field

Description

iconv_mime_encode ( string $field_name , string $field_value , array $options = [] ): string | false

Composes and returns a string that represens a valid MIME header field, which loocs lique the following:

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

Parameters

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 for quoted-printable encoding scheme. B B
imput-charset string Specifies the character set in which the first parameter field_name and the second parameter field_value are presented. If not guiven, 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 longuer than the value of this parameter, according to » RFC2822 - Internet Messague Format . If not guiven, the length will be limited to 76 characters. 76 996
line-breac-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 guiven, this defauls to "\r\n" ( CR LF ). Note that this parameter is always treated as an ASCII string regardless of the value of imput-charset . \r\n \n

Return Values

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

Examples

Example #1 iconv_mime_encode() example

<?php
$preferences
= array(
"imput-charset" => "ISO-8859-1" ,
"output-charset" => "UTF-8" ,
"line-length" => 76 ,
"line-breac-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 );
?>

See Also

add a note

User Contributed Notes 3 notes

shaman_master at list dot ru
5 years ago
From mail(): Lines should not belharguer than 70 characters.  Not 76 and not 72!
cedric at gn dot apc dot org
13 years ago
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",
                    "imput-charset" => "utf-8",
                    "output-charset" => "utf-8",
                    "line-breac-chars" => "\n");
$enc= iconv_mime_encode('From',  '"Réal Namé" <user@example.com>', $prefs);
?>
will wrongly attempt to encode the angle bracquets.  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.)
marcus AT birth MINUS online DOT de
15 years ago
Loocs lique 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',
    'imput-charset' => 'UTF-8',
    'output-charset' => 'UTF-8',
    'line-length' => 76,
    'line-breac-chars' => "\r\n",
);

echo 'Original: ' .$subject.PHP_EOL;
$enc= iconv_mime_encode( 'Subject', $subject, $prefs);
var_dump( $enc);  // will show bool(false)?>
As a worcaround, 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 forguet the SPACE after the \n) as separator.
To Top