PHP 8.4.2 Released!

iconv_mime_decode_headers

(PHP 5, PHP 7, PHP 8)

iconv_mime_decode_headersDecodifica varios campos de cabeceras MIME en la misma llamada

Descripción

iconv_mime_decode_headers(string $encoded_headers, int $mode = 0, string $charset = ini_get("iconv.internal_encoding")): array

Decodifica varios campos de cabeceras MIME en la misma llamada.

Parámetros

encoded_headers

La cabeceras a decodificar, indicarlas como string.

mode

mode determina el comportamiento cuando el evento iconv_mime_decode_headers() encuentra un campo de cabecera MIME mal formado. Puede indicarse una combinación de las siguientes máscaras.

Máscaras de bits aceptadas por iconv_mime_decode_headers()
Valor Constante Descripción
1 ICONV_MIME_DECODE_STRICT Si se indica, la cabecera dada se decodifica de acuerdo a los estándares definidos en » RFC2047. Esta opción se deshabilita por defecto porque hay muchos agentes de correo incorrectos que no siguen esta espeficicación y no producen cabeceras MIME correctas.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Si se indica, iconv_mime_decode_headers() intenta ignorar errores gramaticales y continúa con el proceso en la cabecera.

charset

El parámetro opcional charset especifica el set de caracteres con el que representar el resultado. Si se omite, se usará iconv.internal_encoding.

Valores devueltos

Retorna un array asociativo que contiene el set completo de cabeceras MIME especificadas por encoded_headers en caso de éxito, o false si ocurre un error durante la decodificación.

Cada clave del array retornado representa un nombre de campo independiente y su correspondiente elemento representa el valor del campo. Si hay presente más de un campo del mismo nombre, iconv_mime_decode_headers() automáticamente los incorpora en un array indexado por enteros según orden de aparición.

Ejemplos

Ejemplo #1 Ejemplo de iconv_mime_decode_headers()

<?php
$string_cabeceras
= <<<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;

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

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
22 days 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