127 votes

Codage des paramètres de requête d'URL en Java

Comment encoder les paramètres de requête pour aller sur une url en Java? Je sais, cela semble évident et déjà posées.

Il y a deux subtilités que je ne suis pas sûr de:

  1. Devrait espaces être codé sur l'url d'un "+" ou "%20"? Dans google chrome, si je tape "http://google.com/foo=?bar moi" chrome changements qu'il soit codé par %20
  2. Est-il nécessaire/correct pour encoder des deux-points ": "%3B? Google Chrome ne fonctionne pas.

Notes:

  • java.net.URLEncoder.encode ne semble pas fonctionner, il semble être pour l'encodage des données de formulaire soumis. Par exemple, il code de l'espace en tant que + au lieu de %20, et le code du côlon, ce qui n'est pas nécessaire.
  • java.net.URI ne pas encoder les paramètres de la requête

144voto

Buhake Sindi Points 38654

java.net.URLEncoder.encode(String s, String encoding) peuvent aider trop. Il suit le formulaire HTML de codage application/x-www-form-urlencoded.

URLEncoder.encode(query, "UTF-8");

D'autre part, pour Cent de codage (aussi connu comme l'encodage de l'URL) code de l'espace avec %20. Le côlon est un caractère réservé, alors : restera toujours un colon, après l'encodage.

16voto

Johan Sjöberg Points 20759

EDIT: URIUtil n'est plus disponible dans les versions plus récentes, de mieux répondre à Java - encoder l'URL ou par M. Sindi dans ce fil.


URIUtil de Apache httpclient est vraiment utile, bien qu'il existe des alternatives

URIUtil.encodeQuery(url);

Par exemple, il encode l'espace d'un "+" au lieu de "%20"

Les deux sont parfaitement valables dans le bon contexte. Bien que si vous avez vraiment préféré que vous pourrait émettre une chaîne de caractères à remplacer.

9voto

Edwin Buck Points 33097

Il n'est pas nécessaire de coder un colon comme% 3B dans la requête, bien que cela ne soit pas illégal.

 URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
query       = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
 

Il semble également que seuls les espaces codés en pourcentage sont valides, car je doute que l’espace soit un ALPHA ou un DIGIT.

consultez la spécification URI pour plus de détails.

5voto

rfeak Points 5488

Le construit en Java URLEncoder est ce qu'il est censé le faire, et vous devez l'utiliser.

Un "+" ou "%20" sont à la fois valides remplacer un caractère espace dans l'URL. Soit on va travailler.

Un ":" doit être encodée, c'est un caractère séparateur. c'est à dire http://foo ou ftp://bar. Le fait qu'un navigateur peut s'en occuper quand il n'est pas codé n'est pas correct. Vous devez les encoder.

Comme une question de bonne pratique, assurez-vous d'utiliser la méthode qui prend un paramètre d'encodage de caractères. UTF-8 est généralement utilisée ici, mais vous devez fournir explicitement.

URLEncoder.encode(yourUrl, "UTF-8");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X