PHPerKaigi 2024

iconv_mime_decode

(PHP 5, PHP 7, PHP 8)

iconv_mime_decodeDecodifica um campo de cabeçalho MIME

Descrição

iconv_mime_decode(string $string, int $mode = 0, ?string $encoding = null): string|false

Decodifica um campo de cabeçalho MIME.

Parâmetros

string

O cabeçalho codificado, como uma string.

mode

mode determina o comportamento no caso de iconv_mime_decode() encontrar um campo de cabeçalho MIME malformado. Você pode especificar qualquer combinação das seguintes máscaras de bits.

Máscaras de bits aceitáveis para iconv_mime_decode()
Valor Constante Descrição
1 ICONV_MIME_DECODE_STRICT Se definido, o cabeçalho fornecido é decodificado em total conformidade com os padrões definidos em » RFC2047. Esta opção está desativada por padrão porque há muitos agentes de usuário de e-mail quebrados que não seguem a especificação e não produzem cabeçalhos MIME corretos.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Se definido, iconv_mime_decode_headers() tenta ignorar quaisquer erros gramaticais e continuar a processar um determinado cabeçalho.

encoding

O parâmetro opcional encoding especifica o conjunto de caracteres pelo qual representar o resultado. Se omitido ou null, iconv.internal_encoding será usado.

Valor Retornado

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

Registro de Alterações

Versão Descrição
8.0.0 encoding é anulável agora.

Exemplos

Exemplo #1 Exemplo iconv_mime_decode()

<?php
// This yields "Subject: Prüfung Prüfung"
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=",
0, "ISO-8859-1");
?>

Veja Também

add a note

User Contributed Notes 3 notes

up
3
Dirk Becker
10 years ago
While creating a new webmailer, I had to coop with a lot of mails and only half of them were correct encoded!
Often the text is tagged as ISO but in real its UTF :/

After trying a lot of solutions and combination a found a way which seems to work for all our mails. Maybe its usefull to someone else too.

<?php

function mime_encode($data)
{
$resp = imap_utf8(trim($data));

if(
preg_match("/=\?/", $resp))
$resp = iconv_mime_decode($data, ICONV_MIME_DECODE_CONTINUE_ON_ERROR, "ISO-8859-15");

if(
json_encode($resp) == 'null')
$resp = utf8_encode($resp);

return
$resp;
}

?>
up
1
koronci at aol dot com
11 years ago
A simple and working solution for latin encoding supports Slovak, Czech, Russian ect.
<?php iconv("utf-8", "windows-1250", $SomeWeirdText); ?>

specially for those who strugle with imap_mime_header_decode
up
1
dido dot sevilla at gmail dot com
18 years ago
In PHP versions that have imap_mime_decode built in, it's possible to emulate the operation of this function:

<?php
function iconv_mime_decode($str, $mode=0, $charset="UTF-8")
{
$data = imap_mime_header_decode($str);
if (
count($data) > 0) {
// because iconv doesn't like the 'default' for charset
$charset = ($data[0]->charset == 'default') ? 'ASCII' : $data[0]->charset;
return(
iconv($charset, $charset, $data[0]->text));
}
return(
"");
}
?>

I've only tried to use this code snippet to decode ISO-2022-JP messages to UTF-8, but I see no reason why it shouldn't work in other cases.
To Top