PHP 8.4.2 Released!

iconv_mime_decode_headers

(PHP 5, PHP 7, PHP 8)

iconv_mime_decode_headersDecodifica vários campos de cabeçalho MIME de uma só vez

Descrição

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

Decodifica vários campos de cabeçalho MIME de uma só vez.

Parâmetros

headers

Os cabeçalhos codificados como uma string.

mode

mode determina o comportamento no caso de iconv_mime_decode_headers() encontrar um campo de cabeçalho MIME malformado. Você pode especificar qualquer combinação das seguintes máscaras de bits.

Máscaras de bits aceitáveis para iconv_mime_decode_headers()
Valor Constante Descrição
1 ICONV_MIME_DECODE_STRICT Se definido, o cabeçalho fornecido é decodificado em total conformidade com os padrões definidos em » RFC2047. Esta opção está desativada por padrão porque há muitos agentes de usuário de e-mail quebrados que não seguem a especificação e não produzem cabeçalhos MIME corretos.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Se definido, iconv_mime_decode_headers() tenta ignorar quaisquer erros gramaticais e continuar a processar um determinado cabeçalho.

encoding

O parâmetro opcional encoding especifica o conjunto de caracteres pelo qual representar o resultado. Se omitido ou null, iconv.internal_encoding será usado.

Valor Retornado

Retorna uma matriz associativa que contém todo um conjunto de campos de cabeçalho MIME especificados por headers em caso de sucesso ou false se ocorrer um erro durante a decodificação.

Cada chave do valor de retorno representa um nome de campo individual e o elemento correspondente representa um valor de campo. Se mais de um campo com o mesmo nome estiver presente, iconv_mime_decode_headers() os incorporará automaticamente em uma matriz indexada numericamente na ordem de ocorrência. Observe que os nomes de cabeçalhos não são case-insensitive.

Registro de Alterações

Versão Descrição
8.0.0 encoding é anulável agora.

Exemplos

Exemplo #1 Exemplo 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);
?>

O exemplo acima produzirá:

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
        )

)

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
0
phpmanual at NOSPAM dot headbank dot co dot uk
21 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