Page 1 sur 1

urldecode ne décode pas tout...

Posté : 02 mars 2006, 01:31
par Totoro
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:

Posté : 02 mars 2006, 04:03
par Hubert Roksor
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().

Posté : 02 mars 2006, 08:50
par Totoro
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!!!

Posté : 02 mars 2006, 14:50
par Invité
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!

Posté : 02 mars 2006, 14:54
par Ryle
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 :)

Posté : 02 mars 2006, 18:35
par Invité
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!!!

Posté : 02 mars 2006, 21:48
par Hubert Roksor
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.

Posté : 03 mars 2006, 00:22
par Invité
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: