iconv_mime_encode

(PHP 5, PHP 7, PHP 8)

iconv_mime_encodeConstruit un en-tête MIME avec les champs field_name et field_value

Description

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

iconv_mime_encode() compose et retourne une chaîne de caractères qui représente un champ en-tête MIME qui ressemble à :

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
Dans l'exemple ci-dessus, "Subject" est le nom du champ et la portion qui commence par "=?ISO-8859-1?..." est la valeur du champ.

Liste de paramètres

field_name

Le nom du champ.

field_value

La valeur du champ.

options

Il est possible de contrôler le comportement de la fonction iconv_mime_encode() en spécifiant un tableau associatif contenant la configuration des éléments dans le paramètre options. La liste des éléments supportés par iconv_mime_encode() figure ci-dessous. Il est à noter que les noms des éléments sont sensibles à la casse.

Liste des éléments supportés par iconv_mime_encode()
Élément Type Description Valeur par défaut Exemple
scheme string Spécifie la méthode d'encodage d'un champ. Les valeurs possibles sont "B" ou "Q", où "B" signifie que le schéma d'encodage sera base64 et "Q", quoted-printable. B B
input-charset string Spécifie le jeu de caractères pour représenter le premier paramètre field_name et le second paramètre field_value. S'il est omis, iconv_mime_encode() utilisera la directive de configuration iconv.internal_encoding du php.ini pour les représenter. iconv.internal_encoding ISO-8859-1
output-charset string Spécifie le jeu de caractères à utiliser pour composer l'en-tête MIME. iconv.internal_encoding UTF-8
line-length int Spécifie la longueur maximale de chaque en-tête. Si l'en-tête est plus grand que la longueur définie par ce paramètre, l'en-tête résultant sera un en-tête composé de plusieurs lignes conformément au standard » RFC2822 - Internet Message Format. S'il est omis, la longueur maximale sera fixée à 76 caractères. 76 996
line-break-chars string Spécifie les caractères de fin de ligne. S'il est omis, la valeur par défaut sera "\r\n" (CR LF). Il est à noter que ce paramètre est toujours représenté comme une chaîne ASCII au regard de la valeur du paramètre input-charset. \r\n \n

Valeurs de retour

Retourne un champ MIME en cas de succès, ou false si une erreur survient durant l'encodage.

Exemples

Exemple #1 Exemple avec iconv_mime_encode()

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

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

Voir aussi

add a note

User Contributed Notes 3 notes

up
1
shaman_master at list dot ru
6 years ago
From mail(): Lines should not belarger than 70 characters.  Not 76 and not 72!
up
1
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",
                    "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.)
up
0
markus AT birth MINUS online DOT de
15 years ago
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.
To Top