iconv_mime_decode

(PHP 5, PHP 7, PHP 8)

iconv_mime_decodeDécode un champ d’en‐tête MIME

Description

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

iconv_mime_decode() décode un champ d’en‐tête MIME.

Liste de paramètres

string

L’en‐tête encodé, sous la forme d’une chaîne de caractères.

mode

mode détermine une alternative dans le cas où iconv_mime_decode() rencontre un champ d’en‐tête MIME mal formé.

Masques acceptables pour la fonction iconv_mime_decode()
Valeur Constante Description
1 ICONV_MIME_DECODE_STRICT Si défini, l’en‐tête correspondant sera décodé en suivant strictement le standard » RFC2047. Cette option est désactivée par défaut, car il existe beaucoup de mauvais clients de courriel qui ne suivent pas ce standard et donc, produisent de mauvais en‐têtes MIME.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Si défini, iconv_mime_decode() essaie de continuer à décoder l’en‐tête passé, même si des erreurs apparaissent.

encoding

Le paramètre par défaut encoding spécifie le jeu de caractères à utiliser pour représenter le résultat. S’il est omis, iconv.internal_encoding sera utilisé.

Valeurs de retour

Retourne un champ MIME en cas de succès, ou false si une erreur survient durant le décodage.

Historique

Version Description
8.0.0 encoding est désormais nullable.

Exemples

Exemple #1 Exemple avec iconv_mime_decode()

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

Voir aussi

add a note add a note

User Contributed Notes 3 notes

up
3
Dirk Becker
11 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
dido dot sevilla at gmail dot com
19 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.
up
0
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
To Top