PHP Conference Japan 2024

imap_mime_header_decode

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

imap_mime_header_decodeMIME başlık elemanlarının kodlamasını açar

Açıklama

imap_mime_header_decode(string $dizge): array|false

ASCII olmayan karakterler içeren MIME ileti başlıklarının kodlamasını açar (» RFC 2047'ye bakınız).

Bağımsız Değişkenler

dizge

MIME kodlu metin.

Dönen Değerler

Kodu açılan başlıklar bir nesne dizisi olarak döndürülür. Her nesnenin iki özelliği vardır: charset ve text.

Başlıklar kodlanmamışsa, yani salt ASCII iseler nesnenin charset özelliğine default değeri atanır.

İşlev başarısızlık durumunda false döndürür.

Örnekler

Örnek 1 - imap_mime_header_decode() örneği

<?php
$text
= "=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@example.com>";

$elements = imap_mime_header_decode($text);
for (
$i=0; $i<count($elements); $i++) {
echo
"Charset: {$elements[$i]->charset}\n";
echo
"Text: {$elements[$i]->text}\n\n";
}
?>

Yukarıdaki örneğin çıktısı:

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

Charset: default
Text:  <keld@example.com>

Yukarıdaki örnekte dizi iki elemanlıdır. İlk elemandaki nesne ISO-8859-1 kodlu bir dizge içerirken ikincisi salt ASCII bir dizge içermektedir.

Ayrıca Bakınız

  • imap_utf8() - MIME kodlu metni UTF-8'e dönüştürür

add a note

User Contributed Notes 1 note

up
9
Anonymous
11 years ago
A nice way to decode strings is to use the mb_list_encodings(), but I had two problems with it:
sometimes, the charset is uppercase in the header an lowercase in mb_list_encodings() and sometimes, the charset is not in the mb_list_encodings() list.

<?php
function upperListEncode() { //convert mb_list_encodings() to uppercase
$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)) { //convert charset to uppercase
case 'UTF-8': $texte.= $tabChaine[$i]->text; //utf8 is ok
break;
case
'DEFAULT': $texte.= $tabChaine[$i]->text; //no convert
break;
default: if (
in_array(strtoupper($tabChaine[$i]->charset),upperListEncode())) //found in mb_list_encodings()
{$texte.= mb_convert_encoding($tabChaine[$i]->text,'UTF-8',$tabChaine[$i]->charset);}
else {
//try to convert with iconv()
$ret = iconv($tabChaine[$i]->charset, "UTF-8", $tabChaine[$i]->text);
if (!
$ret) $texte.=$tabChaine[$i]->text; //an error occurs (unknown charset)
else $texte.=$ret;
}
break;
}
}

return
$texte;
}
?>
To Top