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! :D

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 &amp, &copy et &pound, 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! :D