iconv_mime_decode

(PHP 5, PHP 7, PHP 8)

iconv_mime_decodeDécode un champ d'en-tête MIME

Description

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

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 le comportement dans le cas où iconv_mime_decode() rencontre un champ d'en-tête MIME mal formé. Il est possible de spécifier toute combinaison des masques de bits suivants.

Masques de bits acceptables par iconv_mime_decode()
Valeur Constante Description
1 ICONV_MIME_DECODE_STRICT Si défini, l'en-tête fourni est décodé en pleine conformité avec les standards définis dans la » RFC2047. Cette option est désactivée par défaut, car il existe beaucoup de clients de courriel défectueux qui ne suivent pas la spécification et ne produisent pas d'en-têtes MIME corrects.
2 ICONV_MIME_DECODE_CONTINUE_ON_ERROR Si défini, iconv_mime_decode_headers() tente d'ignorer toute erreur grammaticale et de continuer à traiter un en-tête fourni.

encoding

Le paramètre optionnel encoding spécifie le jeu de caractères à utiliser pour représenter le résultat. S'il est omis ou vaut null, iconv.internal_encoding sera utilisé.

Valeurs de retour

Retourne un champ MIME décodé 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 produit : "Subject: Prüfung Prüfung"
echo iconv_mime_decode("Subject: =?UTF-8?B?UHLDvGZ1bmcgUHLDvGZ1bmc=?=",
0, "ISO-8859-1");
?>

Voir aussi

add a note

User Contributed Notes 3 notes

up
4
Dirk Becker
12 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
21 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
13 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