以防万一这能帮到其他人:如果您的报头字符串有任何前导换行符,此函数将拒绝它并返回一个空数组。如果这可能适用于您的输入,请使用 ltrim() 对其进行清理。
尾随空行会被容忍/忽略。
我现在注意到的其他一些特性
1. 第一行中的前导空格(“ ”或“\t”)将包含在返回数组中报头的键名中。ltrim() 也可以防止这种情况。
2. 任何后续报头中的前导空格(键之前)会导致该行附加到前面报头的值,就像它是该报头的续行一样。
(PHP 5, PHP 7, PHP 8)
iconv_mime_decode_headers — 一次解码多个MIME
报头字段
一次解码多个MIME
报头字段。
headers
编码的报头,作为字符串。
mode
mode
确定当iconv_mime_decode_headers()遇到格式错误的MIME
报头字段时的行为。您可以指定以下任何位掩码组合。
值 | 常量 | 描述 |
---|---|---|
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 ) )
以防万一这能帮到其他人:如果您的报头字符串有任何前导换行符,此函数将拒绝它并返回一个空数组。如果这可能适用于您的输入,请使用 ltrim() 对其进行清理。
尾随空行会被容忍/忽略。
我现在注意到的其他一些特性
1. 第一行中的前导空格(“ ”或“\t”)将包含在返回数组中报头的键名中。ltrim() 也可以防止这种情况。
2. 任何后续报头中的前导空格(键之前)会导致该行附加到前面报头的值,就像它是该报头的续行一样。
如果您需要小写的报头名称(正如我阅读的文档中大小写没有保证的那样),请尝试以下操作
<?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);
?>