iconv_mime_encode

(PHP 5, PHP 7, PHP 8)

iconv_mime_encodeConstruye un encabezado MIME con los campos field_name y field_value

Descripción

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

iconv_mime_encode() compone y devuelve una cadena de caracteres que representa un campo encabezado MIME similar a:

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

Parámetros

field_name

El nombre del campo.

field_value

El valor del campo.

options

Puede controlarse el comportamiento de la función iconv_mime_encode() especificando un array asociativo que contenga la configuración de los elementos en el parámetro options. La lista de elementos soportados por iconv_mime_encode() se muestra a continuación. Tenga en cuenta que los nombres de los elementos son sensibles a mayúsculas/minúsculas.

Lista de elementos soportados por iconv_mime_encode()
Elemento Tipo Descripción Valor por omisión Ejemplo
scheme string Especifica el método de codificación de un campo. Los valores posibles son "B" o "Q", donde "B" indica que el esquema de codificación será base64 y "Q", quoted-printable. B B
input-charset string Especifica el juego de caracteres para representar el primer parámetro field_name y el segundo parámetro field_value. Si se omite, iconv_mime_encode() utilizará la directiva de configuración iconv.internal_encoding de su php.ini para representarlos. iconv.internal_encoding ISO-8859-1
output-charset string Especifica el juego de caracteres a utilizar para componer el encabezado MIME. iconv.internal_encoding UTF-8
line-length int Especifica la longitud máxima de cada encabezado. Si el encabezado es mayor que la longitud definida por este parámetro, el encabezado resultante será un encabezado compuesto por varias líneas conforme al estándar » RFC2822 - Internet Message Format. Si se omite, la longitud máxima se establecerá en 76 caracteres. 76 996
line-break-chars string Especifica los caracteres de fin de línea. Si se omite, el valor por omisión será "\r\n" (CR LF). Tenga en cuenta que este parámetro siempre se representa como una cadena ASCII en relación con el valor del parámetro input-charset. \r\n \n

Valores devueltos

Devuelve un campo MIME en caso de éxito, o false si ocurre un error durante la codificación.

Ejemplos

Ejemplo #1 Ejemplo con 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 produce "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="
echo iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);

$preferences["scheme"] = "B";
// Esto produce "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
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
shaman_master at list dot ru
5 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
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