iconv_mime_decode_headers

(PHP 5, PHP 7, PHP 8)

iconv_mime_decode_headersDecodifica múltiples encabezados MIME

Descripción

iconv_mime_decode_headers(string $headers, int $mode = 0, ?string $encoding = null): array|false

iconv_mime_decode_headers() decodifica múltiples encabezados MIME.

Parámetros

headers

Los encabezados codificados, en forma de string.

mode

mode determina el comportamiento de la función, si iconv_mime_decode_headers() encuentra un encabezado MIME malformado.

Mascara aceptada por la función iconv_mime_decode_headers()
Valor Constante Descripción
1 ICONV_MIME_DECODE_STRICT Si se utiliza, los encabezados son decodificados respetando estrictamente el estándar de la » RFC2047. Esta opción está desactivada por omisión, ya que existen numerosos clientes de correo que no siguen estas especificaciones y que no producen encabezados MIME correctos.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Si esta opción está activada, iconv_mime_decode_headers() intenta ignorar los errores de sintaxis y continúa procesando el encabezado dado.

encoding

El parámetro opcional encoding especifica el juego de caracteres utilizado para representar el resultado. Si se omite, se utiliza el juego definido en el archivo php.ini iconv.internal_encoding.

Valores devueltos

Devuelve un array asociativo que contiene los encabezados MIME especificados por el parámetro headers, o bien false si ocurre un error durante el decodificado.

Cada clave del array devuelto contiene un nombre de encabezado distinto, y su valor correspondiente. Si varios campos tienen el mismo nombre, iconv_mime_decode_headers() convierte ese campo en un array indexado, con los valores en su orden de aparición. Cabe señalar que los nombres de los encabezados no son insensibles a mayúsculas/minúsculas.

Historial de cambios

Versión Descripción
8.0.0 encoding ahora es nullable.

Ejemplos

Ejemplo #1 Ejemplo con iconv_mime_decode_headers()

<?php
$headers_string
= <<<EOF
Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
To: example@example.com
Date: Thu, 1 Jan 1970 00:00:00 +0000
Message-Id: <example@example.com>
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id example for <example@example.com>;
Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
(envelope-from example-return-0000-example=example.com@example.com)
Received: (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000

EOF;

$headers = iconv_mime_decode_headers($headers_string, 0, "ISO-8859-1");
print_r($headers);
?>

El resultado del ejemplo sería:

Array
(
    [Subject] => Prüfung Prüfung
    [To] => example@example.com
    [Date] => Thu, 1 Jan 1970 00:00:00 +0000
    [Message-Id] => <example@example.com>
    [Received] => Array
        (
            [0] => from localhost (localhost [127.0.0.1]) by localhost with SMTP id example for <example@example.com>; Thu, 1 Jan 1970 00:00:00 +0000 (UTC) (envelope-from example-return-0000-example=example.com@example.com)
            [1] => (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000
        )

)

Ver también

add a note

User Contributed Notes 2 notes

up
0
phpmanual at NOSPAM dot headbank dot co dot uk
7 months ago
Just in case this catches anyone else: If your headers string has any leading linebreaks, this function will reject it and return an empty array. If that might apply to your input, sanitise it with ltrim().

Trailing empty lines are tolerated/ignored.

Other quirks I noticed just now:

1. Leading whitespace (" " or "\t") in the *first* line will be included in the header's key name in the returned array. ltrim() will prevent that too.

2. Leading whitespace in any subsequent header (before the key) will cause that line to be appended to the preceding header's value, as though it were a run-on of that header.
up
0
TheConstructor
14 years ago
If you need lower-case header-names (as I read the documentation case is not guranteed) try something like

<?php

$headers_string
= <<<EOF
Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
To: example@example.com
Date: Thu, 1 Jan 1970 00:00:00 +0000
Message-Id: <example@example.com>
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id example for <example@example.com>;
Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
(envelope-from example-return-0000-example=example.com@example.com)
Received: (qmail 0 invoked by uid 65534); 1 Thu 2003 00:00:00 +0000

EOF;

$headers = iconv_mime_decode_headers($headers_string, 0, "ISO-8859-1");

$headers = array_combine(array_map("strtolower", array_keys($headers)), array_values($headers));

print_r($headers);
?>
To Top