iconv_mime_decode

(PHP 5, PHP 7, PHP 8)

iconv_mime_decode解码 MIME 邮件头字段

描述

iconv_mime_decode(string $string, int $mode = 0, ?string $encoding = null): string|false

解码 MIME 邮件头字段。

参数

string

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

mode

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

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

encoding

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

返回值

如果成功,则返回解码的 MIME 字段,如果解码过程中发生错误,则返回 false

变更日志

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

示例

示例 #1 iconv_mime_decode() 示例

<?php
// 这将输出 "Subject: Prüfung Prüfung"
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=",
0, "ISO-8859-1");
?>

参见

添加备注

用户贡献备注 3 则备注

Dirk Becker
11 年前
在创建新的 web 邮件程序时,我不得不处理大量邮件,其中只有一半编码正确!
文本通常被标记为 ISO,但实际上是 UTF :/

在尝试了许多解决方案和组合之后,我找到了一种似乎对我们所有的邮件都有效的方法。也许它对其他人也有用。

<?php

function mime_encode($data)
{
$resp = imap_utf8(trim($data));

if(
preg_match("/=\?/", $resp))
$resp = iconv_mime_decode($data, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "ISO-8859-15");

if(
json_encode($resp) == 'null')
$resp = utf8_encode($resp);

return
$resp;
}

?>
koronci at aol dot com
11 年前
一个简单且有效的解决方案,支持拉丁语编码,包括斯洛伐克语、捷克语、俄语等。
<?php iconv("utf-8", "windows-1250", $SomeWeirdText); ?>

特别适用于那些难以使用 imap_mime_header_decode 的用户
dido dot sevilla at gmail dot com
19 年前
在内置 imap_mime_decode 的 PHP 版本中,可以模拟该函数的操作

<?php
function iconv_mime_decode($str, $mode=0, $charset="UTF-8")
{
$data = imap_mime_header_decode($str);
if (
count($data) > 0) {
// 因为 iconv 不喜欢 charset 的 'default' 值
$charset = ($data[0]->charset == 'default') ? 'ASCII' : $data[0]->charset;
return(
iconv($charset, $charset, $data[0]->text));
}
return(
"");
}
?>

我只尝试使用此代码段将 ISO-2022-JP 消息解码为 UTF-8,但我认为它在其他情况下也应该有效。
To Top