un "%20" dans une variable dans une URL

Eléphant du PHP | 108 Messages

11 juil. 2006, 11:45

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

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

11 juil. 2006, 11:51

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 ?)

Eléphant du PHP | 108 Messages

11 juil. 2006, 12:00

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 &?

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

11 juil. 2006, 12:27

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 :)

Eléphant du PHP | 108 Messages

11 juil. 2006, 12:38

oui mais dans "&" il y a aussi "&" donc ca pose encore le meme probleme.

user=jo%20&%20evelien
devient user=jo%20&%20evelien

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 juil. 2006, 12:43

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

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

11 juil. 2006, 12:52

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)

Eléphant du PHP | 108 Messages

11 juil. 2006, 13:10

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"

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 juil. 2006, 13:43

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().

Eléphant du PHP | 108 Messages

11 juil. 2006, 14:32

Merci a vous 3!

J'ai pris la solution urlencode()!

Un post en plus de resolu! :D