Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2008, 13h35   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 3
Points : 1
Points : 1
Par défaut $_GET, utf-8 et accents

Bonjour,

J'ai une page encodée en utf-8 avec un formulaire dont voici les éléments principaux:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
 
 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
  <input type="text" name="q" value="" />
  <input value="Go !" type="submit" />
 </form>
 
<?php echo @$_GET['q']; ?>
 
</body>
</html>
Lorsque je rentre un mot contenant des accents dans l'input (par exemple "mémé"), le écho renvoie bien mémé et l'adresse de la page ressemble à ceci: test.php?q=m%C3%A9m%C3%A9

Par contre, si je tape moi-même l'adresse (donc http://.../test.php?q=mémé), le navigateur la remplace par test.php?q=m%E9m%E9 (ce qui correspond, si j'ai bien compris, à un urlencode en iso?) et mon echo me donne ces caractères horribles: m�m�

J'ai essayé de jouer avec des fonctions comme (raw)url_encode/decode,utf8_encode/decode sans succès.

Merci d'avance.
DrY_GiN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 13h48   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 835
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 835
Points : 3 468
Points : 3 468
Citation:
Envoyé par DrY_GiN Voir le message
Lorsque je rentre un mot contenant des accents dans l'input (par exemple "mémé"), le écho renvoie bien mémé et l'adresse de la page ressemble à ceci: test.php?q=m%C3%A9m%C3%A9
OK.

Citation:
Par contre, si je tape moi-même l'adresse (donc http://.../test.php?q=mémé), le navigateur la remplace par test.php?q=m%E9m%E9 (ce qui correspond, si j'ai bien compris, à un urlencode en iso?)
Oui, le navigateur fait un urlencode( ) de ce que tu as tapé. Et ce que tu tapes dans la barre d'adresse est en ~ISO-8859-1

Citation:
et mon echo me donne ces caractères horribles: m�m�
Oui, car tes caractères urlencodés sont en ~ISO-8859-1 et ne sont donc pas correctement affichés en UTF-8.

Citation:
J'ai essayé de jouer avec des fonctions comme (raw)url_encode/decode,utf8_encode/decode sans succès.
Hum pourtant j'aurai bien senti un utf8_encode( ).

Question : pourquoi veux-tu passer par une saisie dans l'URL ?? Tu risques de ne pas savoir le traitement à apporter à la chaîne $_GET['q'].
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 14h01   #3
Invité de passage
 
Inscription : juillet 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 3
Points : 1
Points : 1
En effet, utf8_encode fonctionne bien, mais lorsque je réutilise le formulaire normalement (en entrant mémé dans le input), le utf8_encode se fait sur un texte qui est déjà en utf8. Ce qui donne également un résultat horrible..

Mais s'il y a un moyen de voir si l'argument passé en GET est en utf8 ou non, alors ça réglerait mon problème.


Sinon, je veux faire ça pour éviter que lorsque quelqu'un change l'url lui même, ou bien qu'un autre site en iso, qui a par exemple un formulaire+une frame qui effectuent une recherche sur mon site, ne donne lieu à ces caractères ��.
DrY_GiN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 14h06   #4
Membre éprouvé
 
Avatar de SphynXz
 
Développeur Web
Inscription : mars 2008
Messages : 439
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2008
Messages : 439
Points : 474
Points : 474
mb_detect_encoding();
__________________
I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
Pour détourner un avion, il faut monter dedans - Frédéric beigbeder
SphynXz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2008, 14h18   #5
Invité de passage
 
Inscription : juillet 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 3
Points : 1
Points : 1
Merci beaucoup, ça fonctionne à merveille!

Et juste une dernière chose, est-ce que j'utilise bien la fonction mb_detect_encoding ?
Code :
1
2
3
4
5
6
 
$encoding = mb_detect_encoding(@$_GET['q'],'UTF-8,ISO-8859-1');
if($encoding == 'ISO-8859-1')
	echo utf8_encode(@$_GET['q']);
else
	echo @$_GET['q'];
DrY_GiN est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h22.


 
 
 
 
Partenaires

Hébergement Web