PHP Conference Nagoya 2025

iconv_mime_encode

(PHP 5, PHP 7, PHP 8)

iconv_mime_encodeBir MIME başlık alanını tertipler

Açıklama

iconv_mime_encode(string $alan_adı, string $alan_değeri, array $seçenekler = []): string|false

Örnekteki gibi, geçerli bir MIME başlık alanını bir dizge olarak tertipleyip döndürür:

Subject: Re: PHP =?utf-8?q?=C3=87eviri?= Grubu
Bu örnekte, "Subject" alan ismi, "Re: PHP =?utf-8?..." ise alanın değeridir.

Bağımsız Değişkenler

alan_adı

Alan ismi.

alan_değeri

Alanın değeri.

seçenekler

İsteğe bağlı seçenekler bağımsız değişkeninde yapılandırma öğelerini içeren bir dizi belirterek iconv_mime_encode() işlevinin davranışını belirleyebilirsiniz. Desteklenen öğeler aşağıda listelenmiştir. Öğe isimlerinin harf büyüklüğüne duyarlı oluşuna dikkat ediniz.

iconv_mime_encode() tarafından desteklenen yapılandırma öğeleri
Öğe Tür Açıklama Öntanımlı değer Örnek
scheme string Alan değerinin kodlanmasında kullanılacak yöntemi belirler. Bu öğenin değeri "B" veya "Q" olabilir. "B" base64 kodlama şemasını, "Q" ise quoted-printable kodlama şemasını betimler. B B
input-charset string alan_adı ve alan_değeri bağımsız değişkenleri için girdi karakter kümesini belirler. Belirtilmezse, iconv.internal_encoding INI yönergesinin değerinin kullanılacağı varsayılır. iconv.internal_encoding ISO-8859-1
output-charset string MIME başlığını tertiplemekte kullanılacak karakter kümesini belirler. iconv.internal_encoding UTF-8
line-length integer Başlık satırının azami uzunluğunu belirler. » RFC2822 - Genel Ağ İleti Biçemi belirtimine göre, bu değerden daha uzun bir başlık alanı satırı, en uzunu bu kadar baytlık satırlar halinde katlanır. Belirtilmezse, satır uzunluğu 76 karakterle sınırlanır. 76 996
line-break-chars string Uzun başlık alanlarına satır katlama uygulandığında satır sonlarına eklenecek dizgeyi belirler. Belirtilmezse, "\r\n" (CR LF) öntanımlıdır. Bu öğenin input-charset değerinden bağımsız olarak daima bir ASCII dizge olarak ele alınacağına dikkat ediniz. \r\n \n

Dönen Değerler

Başarı durumunda kodlanmış MIME alanı, aksi takdirde false döner.

Örnekler

Örnek 1 - iconv_mime_encode() örneği

<?php
$preferences
= array(
"input-charset" => "ISO-8859-1",
"output-charset" => "UTF-8",
"line-length" => 76,
"line-break-chars" => "\n"
);
$preferences["scheme"] = "Q";
// Sonucu: "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="
echo iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);

$preferences["scheme"] = "B";
// Sonucu: "Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?="
echo iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);
?>

Ayrıca Bakınız

add a note

User Contributed Notes 3 notes

up
1
cedric at gn dot apc dot org
12 years ago
iconv_mime_encode() isn't directly suitable for encoding headers which include "specials" as described in RFC 1522 s4 & s5, for example
<?php
$mimeprefs
= array ("scheme" => "Q",
"input-charset" => "utf-8",
"output-charset" => "utf-8",
"line-break-chars" => "\n");
$enc = iconv_mime_encode('From', '"Réal Namé" <user@example.com>', $prefs);
?>
will wrongly attempt to encode the angle brackets. To use the function in place of mb_encode_mimeheader(), instead you need to encode the words separately, removing the superfluous field name:

<?php
$encoded
= "From: \"". preg_replace('/^:\s+/', '', iconv_mime_encode("", $real, $mimeprefs))."\" <$email>";
?>

Also, values of "line-length" greater than 76 would be illegal under RFC 1522 and resulting encoded words may not be recognised. (Not tested, but 72 would be safer.)
up
0
shaman_master at list dot ru
4 years ago
From mail(): Lines should not belarger than 70 characters. Not 76 and not 72!
up
0
markus AT birth MINUS online DOT de
14 years ago
Looks like this function suffers from the same bug as mb_encode_mime() with long strings of non us-ascii characters. The function then returns false. This applies for utf-8 to utf-8 "conversion".

<?php
$subject
= 'Вы находитесь здесь: Главная > продукт';

$prefs = array(
'scheme' => 'Q',
'input-charset' => 'UTF-8',
'output-charset' => 'UTF-8',
'line-length' => 76,
'line-break-chars' => "\r\n",
);

echo
'Original: ' . $subject . PHP_EOL;
$enc = iconv_mime_encode( 'Subject', $subject, $prefs );
var_dump( $enc ); // will show bool(false)
?>

As a workaround, you could explode() the value on spaces and encode each word separately. Then remove the "Subject: " in front of the resulting strings and join() them with "\r\n " (don't forget the SPACE after the \n) as separator.
To Top