Problème avec urlencode

Eléphanteau du PHP | 10 Messages

31 juil. 2007, 15:14

Salut tout le monde, je poste ici à cause d'un petit problème de compatibilité entre PHP et Javascript.

Comme chacun sait, les navigateur performants envoient automatiquement leur URL encodées

http://domain.com/éà devient http://domain.com/%C3%A9%C3%A0

Le problème vient de l'encodage des espaces :

Mettons que je veuille encoder :

http://domain.com/1 2

PHP, qui passe donc automatiquement les URL à urldecode() me renvoi http://domain.com/1+2

On conviendra qu'il change " " en "+", d'ou mon problème : si je veux faire passer "?1+2" pas de problème mais si je veut faire passer "1 2" (grace à un script JS automatiser) l'espace disparait, ma chaine est modifiée!

Donc j'ai 2 question :

Y a t-il un moyen de désactiver urldecode automatique des url par php?
Et est-ce normal qu'il change les espaces en "+" alors que la fonction similaire de JS escape() renvoi bien "%20" ?

Merci de m'aider à me sortir de ce bordel ;)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

31 juil. 2007, 16:53

Et est-ce normal qu'il change les espaces en "+" alors que la fonction similaire de JS escape() renvoi bien "%20" ?
Oui je crois que c'est la RFC qui veut ça.

Mais je ne vois pas le conflit, puisque dans tous les cas ce que tu passes par une URL doit être «urlencodé» et le caractère "+" étant un caractère réservé, il sera encodé comme le veut la règle :
urlencode('1+2') == '1%2B2'
urlencode('1 2') == '1+2'[/code]

Eléphanteau du PHP | 10 Messages

31 juil. 2007, 17:32

en fait finalement jvai utiliser encodeURIComponent() pour le JS et rawurlencode() pour PHP : pas de vagues, ces deux func sont identiques et ne bug pas :)

Merci pour ta réponse mec ;)