iconv_mime_encode

(PHP 5, PHP 7, PHP 8)

iconv_mime_encodeCompone un campo de cabecera MIME

Descripción

iconv_mime_encode(string $field_name, string $field_value, array $preferences = null): string

Compone y retorna un string que representa un campo de cabecera MIME válido que tiene una forma similar a:

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
En el anterior ejemplo, "Subject" es el nombre del campo y la parte que empieza con "=?ISO-8859-1?..." es el valor del campo.

Parámetros

field_name

Nombre del campo.

field_value

Valor del campo.

preferences

Puede controlarse el comportamiento de iconv_mime_decode() especificando un array asociativo que contenga elementos de configuración al parámetro opcional preferences. Los elementos soportados por iconv_mime_encode() son listados seguidamente. Notar que en los nombres de los elementos se distinguen mayúsculas y minúsculas.

Elementos de configuración soportados por iconv_mime_encode()
Elemento Tipo Descripción Valor por defecto Ejemplo
scheme string Especifica el método con el que codificar el valor de un campo. El valor de este elemento puede ser tanto "B" como "Q", donde "B" se usa para un esquema de codificación base64 y "Q" para un esquema de codificación quoted-printable. B B
input-charset string Especifica el set de caracteres con el que se muestran el primer parámetro field_name y el segundo field_value. Si no se da, iconv_mime_encode() asume que esos parámetros se muestran según lo indicado en el parámetro de coonfiguración ini iconv.internal_encoding. iconv.internal_encoding ISO-8859-1
output-charset string Especifica el set de caracteres a usar para componer la cabecera MIME. iconv.internal_encoding UTF-8
line-length integer Especifica la longitud máxima de las líneas de la cabecera. La cabecera resultante se "desdobla" en varias líneas en caso de que el campo de la cabecera resultante sea más largo que el valor de este parámetro, de acuerdo con » RFC2822 - Internet Message Format. Si no se especifica, la longitud se limita a 76 caracteres. 76 996
line-break-chars string Especifica la secuencia de caracteres a añadir a cada línea como signo de final de línea cuando ocurre el "desdoblamiento" de campos de cabeceras largos. Si no se da, por defecto es "\r\n" (CR LF). Notar que este parámetro siempre se trata como strings ASCII, sea cual sea el valor de input-charset. \r\n \n

Valores devueltos

En caso de éxito retorna un campo MIME codificado o false si ha ocurrido un error durante la codificación.

Ejemplos

Ejemplo #1 Ejemplo de 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";
// Esto contiene "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);
?>

Ver también

add a note

User Contributed Notes 3 notes

up
1
cedric at gn dot apc dot org
12 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
shaman_master at list dot ru
4 years ago
From mail(): Lines should not belarger than 70 characters. Not 76 and not 72!
up
0
markus AT birth MINUS online DOT de
13 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