iconv_mime_encode

(PHP 5)

iconv_mime_encodeСжимает поле MIME-заголовка

Описание

string iconv_mime_encode ( string $field_name , string $field_value [, array $preferences = NULL ] )

Сжимает поле MIME-заголовка и представляет его строкой вида:

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
В примере выше "Subject" является именем поля, а часть строки, начиная с "=?ISO-8859-1?..." - его значение.

Список параметров

field_name

Имя поля.

field_value

Значение поля.

preferences

Есть возможность контролировать поведение функции iconv_mime_encode() посредством передачи массива с настройками в качестве третьего аргумента preferences. Возможные значения этого массива, поддерживаемые фунцией iconv_mime_encode(), перечислены ниже. Обратите внимание, что имена элементов чувствительны к регистру символов.

Настройки, поддерживаемые в iconv_mime_encode()
Элемент Тип Описание Значение по умолчанию Пример
scheme string Задает, каким образом закодировать значение поля. Значением этого элемента может быть либо "B", либо "Q". "B" означает схему кодирования base64, а "Q" - quoted-printable. B B
input-charset string Задает, в какой кодировке представлены аргументы field_name и field_value. Если не задан, iconv_mime_encode() предполагает, что набор символов указан в ini-настройке iconv.internal_encoding. iconv.internal_encoding ISO-8859-1
output-charset string Задает набор символов, в котором будет представлен результирующий MIME-заголовок. iconv.internal_encoding UTF-8
line-length integer Устанавливает максимальную длину строк заголовка. Если результирующий заголовок окажется длиннее этой величины, функция его разрежет на несколько строк в соответствии с » Форматом интернет сообщений - RFC2822. Если не задан, эта длина будет установлена 76 символов. 76 996
line-break-chars string Задает последовательность символов, которые будут использоваться для завершения "разрезанных" строк заголовка, если заголовок окажется длиннее одной строки. Если не задан, будут использоваться символы "\r\n" (CR LF). Обратите внимание, что этот аргумент всегда представляется в ASCII кодировке, вне зависимости от значения input-charset. \r\n \n

Возвращаемые значения

Возвращает закодированное MIME поле в случае успеха или FALSE в случае ошибки.

Примеры

Пример #1 Пример использования iconv_mime_encode()

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

$preferences["scheme"] = "B";
// Результат "Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?="
echo iconv_mime_encode("Subject""Prüfung Prüfung"$preferences);
?>

Смотрите также

  • imap_binary() - Convert an 8bit string to a base64 string
  • mb_encode_mimeheader() - Кодирование строки для MIME-заголовка
  • imap_8bit() - Конвертирует 8-битную строку в quoted-printable строку
  • quoted_printable_encode() - Кодирует 8-битную строку в с помощью метода quoted-printable

Коментарии

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.
2010-05-19 08:38:53
http://php5.kiev.ua/manual/ru/function.iconv-mime-encode.html
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.)
2012-03-13 17:54:12
http://php5.kiev.ua/manual/ru/function.iconv-mime-encode.html
From mail(): Lines should not belarger than 70 characters.  Not 76 and not 72!
2020-02-19 21:36:30
http://php5.kiev.ua/manual/ru/function.iconv-mime-encode.html

    Поддержать сайт на родительском проекте КГБ