Bibliothèque Java pour le codage d'URL si nécessaire (comme un navigateur)
Si je mets de la http://localhost:9000/space test
URL de la barre d'adresse d'un navigateur web, il appelle le serveur avec http://localhost:9000/space%20test
.
http://localhost:9000/specÁÉÍtest
sera également codé à http://localhost:9000/spec%C3%81%C3%89%C3%8Dtest
.
Si mettre de l'encodage des Url dans la barre d'adresse (c'est à dire http://localhost:9000/space%20test
et http://localhost:9000/spec%C3%81%C3%89%C3%8Dtest
), ils restent les mêmes (ils ne seront pas codées double).
Est-il une API Java ou de la bibliothèque qui fait ce codage? L'Url provient de l'utilisateur, donc je ne sais pas si ils sont encodés ou non.
(Si il n'y a pas serait-il assez de recherche pour %
dans la chaîne d'entrée et de coder si il ne l'est pas, ou est-il un cas particulier où cela ne fonctionnerait pas?)
Edit:
URLEncoder.encode("space%20test", "UTF-8")
revient avec space%2520test
qui n'est pas ce que je voudrais, car il est double codé.
Edit 2:
En outre, les navigateurs traitent partiellement Url codées, comme http://localhost:9000/specÁÉ%C3%8Dtest
, bien, sans double-codage. Dans ce cas, le serveur reçoit l'URL suivante: http://localhost:9000/spec%C3%81%C3%89%C3%8Dtest
. Il en est de même de la forme codée de ...specÁÉÍtest
.
URLEncoder.encode()
méthode?OriginalL'auteur palacsint | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Ce que chaque développeur web doit savoir à propos de l'encodage de l'URL
Le Codage D'Url Expliqué
Pourquoi ai-je besoin d'encodage d'URL?
Comment l'encodage de l'URL de travail?
Exemple Simple:
"%2F" pour "/" est manquant
OriginalL'auteur Veniamin
Utiliser le java
java.net.URLEncoder#encode()
:Remarque: l'encodage de l'URL complète entraînerait une situation indésirable, par exemple
http://
encode enhttp%3A%2F%2F
!Modifier: pour éviter l'encodage de l'URL par deux fois, vous pouvez vérifier si l'URL contient un
%
que c'est valable uniquement pour les encodages. Mais si un utilisateur à tort bousille les codages (comme, seulement coder l'URL partiellement ou utiliser un%
dans une URL sans qu'il soit utilisé pour l'encodage quelque part), alors il n'y a pas grand chose à faire à l'aide de cette méthode...Cette réponse permet de résoudre le problème ci-dessus pour le cas d'utilisation car il n'y a pas de chemin avec plusieurs segments. Si nous avons voulu résoudre cette façon générique, nous devons séparer le chemin d'accès à la tirets et d'en extraire tous les segments du chemin, puis l'encoder chaque segment séparément, afin d'éviter les tirets d'être codé.
OriginalL'auteur Veger
Enfin, j'ai vérifié ce que Firefox et Chrome ne. J'ai utilisé l'URL suivante avec les deux navigateurs et de capture de la requête HTTP avec netcat (
nc -l -p 9000
):Cette URL contient tous les caractères ASCII de 32 à 127 sauf
[0-9A-Za-z#]
.La capture de la demande est le suivant, Firefox 18.0.1:
Avec Chrome:
Firefox code pour plus de caractères que le Chrome. Ici, il est dans un tableau:
J'ai trouvé une partie du code source de l'arbre qui fait quelque chose de similaire, mais je ne suis pas tout à fait sûr que ce sont en fait des algorithmes utilisés ou pas:
toolkit/components/url-classifier/nsUrlClassifierUtils.cpp
De toute façon, ici, c'est une preuve de concept de code en Java:
Car il utilise
URLEncoder.encode
, il gèreÁÉÍ
caractères ainsi que des caractères ASCII.OriginalL'auteur palacsint
C'est un Scala extrait de code. Cet encodeur encoder les caractères non-ascii et les caractères réservés dans l'URL. Aussi, l'opération est la quantité, l'URL ne sera pas codées double.
Exemple d'utilisation(code de test)
Ce code est à partir de Qiita.
OriginalL'auteur suin
Standard de Java de l'api elle-même fera l'URL d'encodage et de décodage.
java.net.URI
essayez les classes
URLDecoder
etURLEncoder
Pour encoder du texte pour un passage sûr à travers les internets:
Et à décoder:
OriginalL'auteur TheWhiteRabbit