Page 1 sur 1
un "%20" dans une variable dans une URL
Posté : 11 juil. 2006, 11:45
par sasg
Bonjour,
je dois recuperer une variable dans une url ($_GET), mais cette variable de cette url s'affiche avec "%20" au lieu d'espace.
Donc quand je veux recuperer cette variable, tout ce qu'il ya apres "%20" n'est pas pris en compte.
Code : Tout sélectionner
ex: var= 'jo le lapin'
dans l'url ca donne : ....?var=jo%20le%20lapin
je recupere que "jo" et pas le reste!
Comment puis faire pour recuperer la totalité de ma variable?
Merci pour toute l'aide que vous pouvez m'apporter!

Posté : 11 juil. 2006, 11:51
par Ryle
C'est bizare ton histoire... le remplacement des espaces par %20 est l'encodage normal dans l'url... php gere ça très bien en théorie... quand tu fais un print_r($_GET) ça a quelle tête ?
Je ne vois pas trop ce qui pourrait empêcher $_GET['var'] de contenir ta valeur (ou alors tu exécutes quelque chose sur le GET avant de la récupérer ?)
Posté : 11 juil. 2006, 12:00
par sasg
excuse moi c'est pas le "%20" qui pose probleme c'est le "&" dans la variable
user=jo%20&%20evelien
et le print donne : Array ( [user] => jo [evelien] => )
donc comment resoudre le probleme avec le &?
Posté : 11 juil. 2006, 12:27
par Ryle
Ah, ça par contre c'est normal : le "&" est utilisé comme séparateur de variables dans l'url
Tu dois pouvoir le remplacer par "&" pour qu'il ne soit pas considéré comme tel, sinon utilises les fonctions htmlentities() ou htmlspecialchars() pour préparer ta chaine avant de la passer dans l'url

Posté : 11 juil. 2006, 12:38
par sasg
oui mais dans "&" il y a aussi "&" donc ca pose encore le meme probleme.
user=jo%20&%20evelien
devient user=jo%20&%20evelien
Posté : 11 juil. 2006, 12:43
par zeus
Tout dépend de la configuration de ton serveur, il est possible qu'il soit correctement encodé
Essaye simplement de passer par url_decode() ce que tu récupères de ton GET
Posté : 11 juil. 2006, 12:52
par Ryle
Sinon au pire tu peux remplacer le "&" par "%26" ... mais doit y avoir des moyen plus propre de faire ça via des fonction php (encoder en ut8 par exemple)
Posté : 11 juil. 2006, 13:10
par sasg
voila ce que j'ai fait:
- la variable a passe par l'url est "jo & evelien"
- dans l'url, apres l'avoir passe dans htmlspecialchars donne "jo%20&%20evelien"
- je recupere grace au $_GET
ce qui me donne dans un echo "jo"
Posté : 11 juil. 2006, 13:43
par ouckileou
urlencode()
Note : faites bien attention aux variables qui ressemblent à des entités HTML, comme &, © et £, qui sont analysées par le client web et remplacées par leur valeur. C'est un vrai problème qui a été montré par le W3C depuis longtemps. La référence est ici :
http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2. PHP supporte le remplacement de séparateur d'arguments par un point-virgule, comme recommandé par le W3C, grâce à la directive arg_separator du fichier php.ini. Malheureusement, la plupart des clients web n'envoient pas leurs données de formulaire avec des points-virgules. Une solution plus portable est d'utiliser & à la place de & comme séparateur. Vous n'avez alors pas à changer la directive arg_separator. Laissez-la à &, mais encodez vos URL en utilisant htmlentities() ou htmlspecialchars().
Posté : 11 juil. 2006, 14:32
par sasg
Merci a vous 3!
J'ai pris la solution urlencode()!
Un post en plus de resolu!
