iconv_mime_decode_headers

(PHP 5, PHP 7, PHP 8)

iconv_mime_decode_headers一次解码多个 MIME 头字段

描述

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

一次解码多个 MIME 头字段。

参数

headers

编码的头,以字符串形式。

mode

mode 决定了 iconv_mime_decode_headers() 遇到格式错误的 MIME 头字段时的行为。您可以指定以下任何位掩码组合。

可接受的位掩码 iconv_mime_decode_headers()
常量 描述
1 ICONV_MIME_DECODE_STRICT 如果设置,则给定的头将按照 » RFC2047 中定义的标准完全解码。此选项默认情况下被禁用,因为有许多不符合规范的邮件用户代理,它们不会生成正确的 MIME 头。
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR 如果设置,iconv_mime_decode_headers() 尝试忽略任何语法错误并继续处理给定的头。

encoding

可选的 encoding 参数指定用来表示结果的字符集。如果省略或为 null,将使用 iconv.internal_encoding

返回值

如果成功,则返回一个关联数组,其中包含由 headers 指定的整套 MIME 头字段;如果在解码过程中发生错误,则返回 false

返回值的每个键代表一个单独的字段名称,相应的元素代表一个字段值。如果存在多个具有相同名称的字段,iconv_mime_decode_headers() 会自动将它们合并到一个按出现顺序排列的数字索引数组中。注意,头名称不是区分大小写的。

变更日志

版本 描述
8.0.0 encoding 现在可以为空。

示例

示例 #1 iconv_mime_decode_headers() 示例

<?php
$headers_string
= <<<EOF
Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
To: [email protected]
Date: Thu, 1 Jan 1970 00:00:00 +0000
Message-Id: <[email protected]>
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id example for <[email protected]>;
Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
(envelope-from [email protected])
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);
?>

上面的示例将输出

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

)

参见

添加注释

用户贡献的注释 1 则注释

TheConstructor
14 年前
如果您需要小写头名称(我读到文档中的情况没有保证),请尝试以下方法:

<?php

$headers_string
= <<<EOF
Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=
To: [email protected]
Date: Thu, 1 Jan 1970 00:00:00 +0000
Message-Id: <[email protected]>
Received: from localhost (localhost [127.0.0.1]) by localhost
with SMTP id example for <[email protected]>;
Thu, 1 Jan 1970 00:00:00 +0000 (UTC)
(envelope-from [email protected])
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