2010-04-27 16 views
3

Je crée une petite, basée sur le Web, client de messagerie en PHP et a remarqué que plusieurs email sujets et matières apparaissent comme suit:Comment décoder les mails des chaînes d'en-tête avec leur type d'encodage en eux en PHP

=?ISO-8859-1?Q?Everything_for_=A35_-_Box_Sets,_Games_?= =?ISO-8859-1?Q?and_CD_Soundtracks...hurry,_ends_soon?= 
=?utf-8?B?UGxheS5jb206IE9uZSBEYXkgT25seSDigJMgT3V0IG9mIHRoaXMgV29ybGQgRGVhbHMh?= 
=?windows-1252?Q?Jon,_delivery_on_us_&_earn_=A35_credit_or_50_prints?= 

Est-ce que quelqu'un a des idées pour les décoder afin qu'ils s'affichent correctement?

Répondre

4

C'est un RFC 2047 mot codé. Il est décodé par la fonction mb_decode_mimeheader.

+0

J'ai été pointé ici en raison d'un possible [doublon] (http://stackoverflow.com/questions/41894171/google-apps-office-365-imap-from-name-character-set-encoding-how- to-décoder-i). Si vous utilisez IMAP, utilisez 'imap_utf8()' à la place. –

2

Il s'agit d'une chaîne codée au format MIME, principalement utilisée pour les en-têtes. Vous pouvez trouver beaucoup de bibliothèques qui peuvent gérer cela. Par exemple, obtenir PEAR :: courrier et utiliser cette fonction,

Mail_mimeDecode::_decodeHeader() 
0

Ceci est une vieille question, mais récemment, j'ai rencontré ce problème lors de l'analyse des courriels. Lors de l'impression l'info en-tête en utilisant la fonction imap_header_info, le tableau suivant a été montré:

stdClass Object 
(
    [subject] => =?Windows-1252?Q?field_name_-_need___`at_risk=92____into_t?= =?Windows-1252?Q?he_label_(_some_content_to_)_?= 
) 

Cependant, le sujet original était "nom de domaine - besoin à risque dans l'étiquette (un contenu à) "

pour résoudre ce problème, la fonction imap_mime_header_decode doit être utilisé dans une boucle pour générer le texte correct:

$header = imap_headerinfo($email_obj, $email_ref_number, 0); 
$elements = imap_mime_header_decode($header->subject); 
$email_subject = ''; 
if (! empty($elements)) { 
    foreach ($elements AS $e_part) { 
     if (isset($e_part->text)) { 
      $email_subject .= $e_part->text; 
     } 
    } 
} 
echo $email_subject;