CakeFest 2024: The Official CakePHP Conference

iconv_mime_encode

(PHP 5, PHP 7, PHP 8)

iconv_mime_encodeCompõe um campo de cabeçalho MIME

Descrição

iconv_mime_encode(string $field_name, string $field_value, array $options = []): string|false

Compõe e retorna uma string que representa um campo de cabeçalho MIME válido, semelhante ao seguinte:

Subject: =?ISO-8859-1?Q?Pr=FCfung_f=FCr?= Entwerfen von einer MIME kopfzeile
No exemplo acima, "Subject" é o nome do campo e a parte que começa com "=?ISO-8859-1?..." é o valor do campo.

Parâmetros

field_name

O nome do campo.

field_value

O valor do campo.

options

Você pode controlar o comportamento de iconv_mime_encode() especificando uma matriz associativa que contém itens de configuração para as options opcionais do terceiro parâmetro. Os itens suportados por iconv_mime_encode() estão listados abaixo. Observe que os nomes dos itens são tratados com distinção entre maiúsculas e minúsculas.

Itens de configuração suportados por iconv_mime_encode()
Item Tipo Descrição Valor padrão Exemplo
scheme string Especifica o método para codificar um valor de campo. O valor deste item pode ser "B" ou "Q", onde "B" significa esquema de codificação base64 e "Q" significa esquema de codificação quoted-printable. B B
input-charset string Especifica o conjunto de caracteres no qual o primeiro parâmetro field_name e o segundo parâmetro field_value são apresentados. Se não for fornecido, iconv_mime_encode() assume que esses parâmetros são apresentados a ele na configuração ini iconv.internal_encoding . iconv.internal_encoding ISO-8859-1
output-charset string Especifica o conjunto de caracteres a ser usado para compor o cabeçalho MIME. iconv.internal_encoding UTF-8
line-length int Especifica o comprimento máximo das linhas de cabeçalho. O cabeçalho resultante é "dobrado" em um conjunto de múltiplas linhas caso o campo do cabeçalho resultante seja maior que o valor deste parâmetro, de acordo com » RFC2822 - Internet Message Format. Se não for fornecido, o comprimento será limitado a 76 caracteres. 76 996
line-break-chars string Especifica a sequência de caracteres a ser anexada a cada linha como um sinal de fim de linha quando a "dobragem" é executada em um campo de cabeçalho longo. Se não fornecido, o padrão é "\r\n" (CR LF). Observe que esse parâmetro é sempre tratado como uma string ASCII, independentemente do valor de input-charset. \r\n \n

Valor Retornado

Retorna um campo MIME codificado em caso de sucesso ou false se ocorrer um erro durante a codificação.

Exemplos

Exemplo #1 Exemplo 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";
// This yields "Subject: =?UTF-8?Q?Pr=C3=BCfung=20Pr=C3=BCfung?="
echo iconv_mime_encode("Subject", "Prüfung Prüfung", $preferences);

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

Veja Também

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
13 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