PHP Conference Japan 2024

imap_mime_header_decode

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_mime_header_decode解码 MIME 头元素

描述

imap_mime_header_decode(字符串 $string): 数组|false

解码非 ASCII 文本的 MIME 消息头扩展(参见 » RFC2047)。

参数

字符串

MIME 文本

返回值

解码后的元素以对象数组的形式返回,其中每个对象有两个属性,charsettext

如果元素未被编码,换句话说,它是纯 US-ASCII,则该元素的 charset 属性设置为 default

如果失败,则函数返回 false

示例

示例 #1 imap_mime_header_decode() 示例

<?php
$text
= "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <[email protected]>";

$elements = imap_mime_header_decode($text);
for (
$i=0; $i<count($elements); $i++) {
echo
"字符集: {$elements[$i]->charset}\n";
echo
"文本: {$elements[$i]->text}\n\n";
}
?>

以上示例将输出

Charset: ISO-8859-1
Text: Keld Jørn Simonsen

Charset: default
Text:  <[email protected]>

在上面的示例中,我们将有两个元素,其中第一个元素先前已使用 ISO-8859-1 编码,第二个元素将是纯 US-ASCII。

参见

  • imap_utf8() - 将 MIME 编码的文本转换为 UTF-8

添加注释

用户贡献的注释 1 条注释

匿名
11 年前
一种解码字符串的好方法是使用 mb_list_encodings(),但我遇到了两个问题
有时,字符集在标头中是大写的,而在 mb_list_encodings() 中是小写的,有时,字符集不在 mb_list_encodings() 列表中。

<?php
function upperListEncode() { //将 mb_list_encodings() 转换为大写
$encodes=mb_list_encodings();
foreach (
$encodes as $encode) $tencode[]=strtoupper($encode);
return
$tencode;
}

function
decode($string) {
$tabChaine=imap_mime_header_decode($string);
$texte='';
for (
$i=0; $i<count($tabChaine); $i++) {

switch (
strtoupper($tabChaine[$i]->charset)) { //将字符集转换为大写
case 'UTF-8': $texte.= $tabChaine[$i]->text; //utf8 可以
break;
case
'DEFAULT': $texte.= $tabChaine[$i]->text; //不转换
break;
default: if (
in_array(strtoupper($tabChaine[$i]->charset),upperListEncode())) //在 mb_list_encodings() 中找到
{$texte.= mb_convert_encoding($tabChaine[$i]->text,'UTF-8',$tabChaine[$i]->charset);}
else {
//尝试使用 iconv() 转换
$ret = iconv($tabChaine[$i]->charset, "UTF-8", $tabChaine[$i]->text);
if (!
$ret) $texte.=$tabChaine[$i]->text; //发生错误(未知字符集)
else $texte.=$ret;
}
break;
}
}

return
$texte;
}
?>
To Top