urldecode ne décode pas tout...

Totoro
Invité n'ayant pas de compte PHPfrance

02 mars 2006, 01:31

Bonjour, débutant en php je bataille un peu sur l'utilisation de scripts depuis flash... Plus précisément, j'ai un script d'envoi de mail que j'appelle dans flash. Le problème c'est que flash a du mal avec les caractères spéciaux (comme les "é"). Solution, j'applique la fonction escape qui encode le texte de cette façon :

"toto toto héhé" devient "toto%20toto%20h%C3%A9h%C3%A9"

et dans mon script php je fais un urldecode... qui me renvoit "toto toto héhé"
Il a donc bien décodé %20, mais pas %C3%A9....


J'avoue ne pas être au top niveau encodage de texte, je débute en php, un peu moins en flash mais c'est tout comme...
Donc si une âme charitable passe dans le coin... :wink:

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

02 mars 2006, 04:03

En fait, urldecode() a fait correctement son boulot. "é" n'est rien d'autre que le caractère "é" encodée en UTF-8. Tu peux d'ailleurs le vérifier en forçant l'encodage des caractères en UTF-8 (sous Firefox c'est dans Affichage -> Encodage de caractères, j'utilise la version anglaise donc la traduction est peut-être légèrement différente, ex: "Code de caractères").

Pour convertif l'UTF-8 en ISO-8859-1 (qui est l'encodage par défaut pour le français, même si de plus en plus de logiciels utilisent UTF-8 par défaut) tu pourras utiliser la fonction utf8_decode().

Totoro
Invité n'ayant pas de compte PHPfrance

02 mars 2006, 08:50

Impec ça marche! Mon seul dernier petit problème concerne les retours à la ligne:
toto héhé
tutu
devient :
toto héhétutu
Si tu as une autre idée géniale, je prends.... mais merci déjà pour l'aide!!!

Invité
Invité n'ayant pas de compte PHPfrance

02 mars 2006, 14:50

Après avoir bataillé un peu, j'ai du mieux... Pour
tutu
titi
toto
j'arrive à récupérer ceci:

Code : Tout sélectionner

<TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"_typewriter\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">tutu</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"_typewriter\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">titi</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING=\"2\"><P ALIGN=\"LEFT\"><FONT FACE=\"_typewriter\" SIZE=\"12\" COLOR=\"#000000\" LETTERSPACING=\"0\" KERNING=\"0\">toto</FONT></P></TEXTFORMAT>
donc mon texte avec plein de balises html... et notamment les retours à la ligne... y a-t-il une fonction en php qui puisse me traduire ça en quelque chose de plus lisible?
Merci d'avance!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mars 2006, 14:54

En principe, le retour charriot n'est pas perdu après le décodage, il n'est simplement pas interprété par le html

Sur ton premier exemple, une fois le texte utf8décodé, essaye d'appeler la méthode nl2br($texte) qui va te transformer les retours charriot en <br /> ce qui devrait te permettre de voir les retours dans le html :)

Invité
Invité n'ayant pas de compte PHPfrance

02 mars 2006, 18:35

Merci beaucoup, j'ai eu du mieux avec ta fonction, à savoir j'avais les retour mais aussi les "<br />, j'ai résolu ça avec
ereg_replace("<br />","\n",nl2br(utf8_decode($message)));
et là je reçois bien
toto
tutu
titi
Merci à tous!!!

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

02 mars 2006, 21:48

Je ne comprends pas trop le sens de ta fonction (nl2br fait exactement le contraire de ton ereg_replace) mais si ça marche pour toi pourquoi pas :roll:

Une précision tout de même, inutile d'utiliser le très lourd et très lent ereg_replace() là où str_replace() ferait la même chose en plus simple et plus rapide.

Invité
Invité n'ayant pas de compte PHPfrance

03 mars 2006, 00:22

Je ne comprends pas trop le sens de ta fonction (nl2br fait exactement le contraire de ton ereg_replace) mais si ça marche pour toi pourquoi pas :roll:

Une précision tout de même, inutile d'utiliser le très lourd et très lent ereg_replace() là où str_replace() ferait la même chose en plus simple et plus rapide.
Explication:
J'envoie depuis flash ceci:
toto
tutu
php me maile ça:
tototutu
après application de nl2br j'obtiens:
toto<br />tutu
que mon replace transforme ça en:
toto/ntutu
pour qu'enfin php me maile ça:
toto
tutu
C'est pourtant facile! :lol: