Encoder de l' ASCII en UTF-8 (en recuperant un mail en IMAP)

Eléphanteau du PHP | 49 Messages

10 déc. 2012, 16:10

Bonjour,
Pour un de mes projets, je parse une boite gmail en PHP et je lis les mails d'un expéditeur donné.

Le problème que je n'arrive pas à résoudre est que le corps du mail est en ASCII et que je n'arrive pas à l'encoder en UTF-8

J'ai essayé tout ça :

Code : Tout sélectionner

$message = imap_fetchbody($inbox,$email_number,1); echo "<hr >1/Message encodé en ".mb_detect_encoding($message)."<br />"; $message = imap_utf8($message); echo "2/Message encodé en ".mb_detect_encoding($message)."<br />"; $message = html_entity_decode($message,ENT_COMPAT, 'UTF-8'); echo "3/Message encodé en ".mb_detect_encoding($message)."<br />"; $message = utf8_encode($message); echo "4/Message encodé en ".mb_detect_encoding($message)."<br />"; $message = iconv("ASCII", "UTF-8", $message); echo "5/Message encodé en ".mb_detect_encoding($message)."<br />"; mb_internal_encoding("UTF-8"); $message = mb_decode_mimeheader($message); echo "6/Message encodé en ".mb_detect_encoding($message)."<hr />";
=> Les 6 echo m'affichent 'Message encodé en ASCII'


Le corps de message qui s'affiche de la sorte dans mon navigateur :
=09=09=09=09Vos donn=C3=A9es demand=C3=A9es le 10/12/2012 =C3=A0=
14H34 sont d=C3=A9sormais disponibles. Vous pouvez les t=C3=A9l=C3=A9charg=
er en cliquant sur le lien de t=C3=A9l=C3=A9chargement ci-dessous.<br/><br/=
>=09=09=09=09=09<tr>
=09=09=09=09=09=09<td>T=C3=A9l=C3=A9chargement des donn=C3=A9es : </td><td>=
<a href=3D"http://www.test.com/=
1524a8e11ac0a5099bb1236">http://www.test.com/telecharge=
ment/7a0a534651524a8e11ac0a5099bb1236</a></td>
=09=09=09=09=09</tr>
=09=09=09=09=09<tr>
Auriez vous une piste de recherche?

Merci d'avance

ViPHP
xTG
ViPHP | 7331 Messages

10 déc. 2012, 17:20

Même s'il y a une fonction qui fonctionnera avec ton code ça risque pas. :?

Ceci sera mieux :
$message = imap_fetchbody($inbox,$email_number,1);
echo "<hr >1/Message encodé en ".mb_detect_encoding($message)."
";
$message2 = imap_utf8($message);
echo "2/Message encodé en ".mb_detect_encoding($message2)."
";
$message2 = html_entity_decode($message,ENT_COMPAT, 'UTF-8');
echo "3/Message encodé en ".mb_detect_encoding($message2)."
";
$message2 = utf8_encode($message);
echo "4/Message encodé en ".mb_detect_encoding($message2)."
";
$message2 = iconv("ASCII", "UTF-8", $message);
echo "5/Message encodé en ".mb_detect_encoding($message2)."
";
mb_internal_encoding("UTF-8");
$message2 = mb_decode_mimeheader($message);
echo "6/Message encodé en ".mb_detect_encoding($message2)."<hr />";

Eléphanteau du PHP | 49 Messages

10 déc. 2012, 19:30

J'aurais aimé que ce soit si simple!
Je viens de tester, ça ne change rien.

Je n'ai jamais rencontré de soucis par rapport à ton approche, j'ai toujours fais des traitement de ce genre :

Code : Tout sélectionner

$test = "un deux trois"; $test = str_replace("deux", "", $test); echo $test ;
Ca renvoie 'un trois'

Et merci!!

ViPHP
xTG
ViPHP | 7331 Messages

11 déc. 2012, 10:01

Le souci que je soulevais c'est que tu appliquais un traitement à une variable.
Ce traitement ci t'aidera à comprendre l'erreur :
$message = "un deux trois quatre";
$message = str_replace("un", "", $message);
echo $message; // deux trois quatre

$message = str_replace("trois","", $message);
echo $message; // deux quatre
Bref si l'une des fonctions modifie ta chaîne le résultat des autres fonctions n'est pas probant vu que ton but est de les exécuter sur la chaîne initiale.

Eléphanteau du PHP | 49 Messages

11 déc. 2012, 10:46

J'en suis arrivé là au fur et à mesure des étapes de debuggage mais c'est clair que vu d'un bloc ça peut paraitre sources d'erreurs.
Merci