2009-12-22 4 views
1

J'ai une URL comme ceci: produit // des extraits feature = image + modesdu navigateur URLEncoder.encode de java

quand j'accéder à cette URL du navigateur, le backend reçoit la demande comme: "product // Extraits? feature = Image + Modes"

A la fin du serveur web, j'utilise + comme séparateur. donc feature = picture + modes signifie qu'il y a 2 caractéristiques: image et modes

J'ai créé et automatisé un script (Java) qui va à l'url et récupère son contenu. Quand je lance ce script, le back-end aura reçu la demande que: "produit/B000NK6J6Q/extraits/feature = image% 2Bmodes"

C'est parce que dans mon script (Java) i utilise URLEncoder.encode qui convertit + pour % 2B et envoyez cette URL codée au serveur.

Pourquoi les urlEncoders fournis par Java et ceux présents avec les navigateurs (FF/IE) sont-ils différents? comment puis-je les rendre identiques? Comment puis-je les décoder? ('+' sur URLDecoder.decode donne de l'espace) Aussi, utilise '+' comme séparateur selon les conventions (et les spécifications?)?

Prac

Répondre

4

Ce que vous voyez est réellement correct. Voir le Percent encoding sur Wikipedia. Le caractère + est un caractère réservé et doit donc être codé %2B. En outre, historiquement, les navigateurs utilisent une forme différente de codage en pourcentage pour les formulaires soumis avec le type MIME application/x-www-form-urlencoded où les espaces deviennent + au lieu de %20.

Si vous souhaitez utiliser un + dans l'URL, votre séparateur doit être un espace dans le backend. Si vous voulez utiliser + dans le backend, alors vous aurez %2B dans l'URL.