2010-02-18 7 views
2

Je veux utiliser URLEncoder class de java pour encoder mes chaînes d'URL. Cependant, par défaut, il convertit les espaces en '+' (signe plus). Je voudrais qu'il utilise "-" à la place (similaire à la façon dont ce site code ses URL).Java URLEncoder changer de caractère spécial?

Je me demande quelle est la meilleure façon de le faire? Dois-je simplement utiliser sa fonctionnalité intégrée et ensuite remplacer une chaîne (de '+' à '-')? Merci

Répondre

5

Le URLEncoder code les URL selon un specific contract. Vous pouvez et vous devez pas changer. En effet il suffit de faire une chaîne de remplacement par la suite, ou peut-être mieux, auparavant. Le trait d'union - est déjà un caractère valide dans l'URL.

String encodedURL = URLEncoder.encode(url.replace(" ", "-"), "UTF-8"); 
1

D'accord avec @BalusC.

Je voudrais également souligner que ce que vous essayez de faire n'est pas vraiment "d'encodage" dans le sens normal de l'expression "encodage d'URL". L'encodage implique qu'il existe une étape de décodage inverse qui vous permettra de retrouver l'URL d'origine. Sauf si vous avez une règle métier qui exclut les caractères "-" (par exemple, des traits d'union si vous créez des noms d'URL à partir de "texte"), votre transformation ne sera pas réversible.

Ce que vous semblez faire est de transformer des chaînes d'URL en d'autres chaînes d'URL selon une règle qui n'est probablement pas réversible. Il n'est pas surprenant que la classe URLEncoder (qui implémente un encodage réversible standardisé) n'implémente pas votre transformation (spécifique à l'application). Comme le souligne @BalusC, l'approche correcte consiste à transformer les chaînes d'URL (en fonction des besoins de votre application) avant et de les encoder. En effet, il peut être préférable (par exemple, plus sûr) d'implémenter la transformation sur les composants de la chaîne d'URL ... avant d'assembler l'URL complète.

(Et je prends pour acquis que les URL sont utilisées dans un contexte qui nécessitent effectivement l'encodage mis en œuvre par URLEncoder.)

1

Ce site n'a pas « encoder ses URL » avec des traits d'union, il les définit de cette façon en premier lieu, apparemment de sorte qu'aucun codage n'est nécessaire. C'est à la façon dont ils génèrent leurs URL. Vous pouvez faire la même chose, mais ce n'est pas URLEncoding, c'est juste de générer des URL. Utiliser URLEncoder pour cette tâche, pour laquelle il n'est pas conçu, et se plaindre qu'il fait exactement ce qu'il est censé faire et non ce que vous voulez est plutôt inutile. Comme l'a dit BalusC, URLEncoder fait partie d'un contrat entre votre navigateur et les serveurs Web du monde. Vous ne pouvez pas changer cela.

Questions connexes