Encoder et décoder les URL rfc2396
Quelle est la meilleure façon d'encoder les chaînes d'URL tels qu'ils sont rfc2396 conformes et de décoder un rfc2396 conforme chaîne telle que, par exemple, %20 est remplacé par un caractère espace?
edit:
URLEncoder et URLDecoder classes ne pas encoder/décoder rfc2396 conforme Url, ils codent pour le type MIME application/x-www-form-urlencoded qui est utilisé pour coder le HTML du formulaire de données du paramètre.
source d'informationauteur Martin OConnor
Vous devez vous connecter pour publier un commentaire.
Utiliser la classe URI comme suit:
ou si vous voulez une Chaîne de caractères:
Vos composants, contenant potentiellement des caractères doivent être échappés, ont déjà été échappé à l'aide de URLEncoder avant d'être concaténés dans un URI.
Si vous avez un URI avec l'extérieur de la bande de caractères (comme l'espace, "<>[]{}\|^`, et non-octets ASCII), il n'est pas vraiment une URI. Vous pouvez essayer de les corriger par manuellement %-y échapper, mais c'est un ultime fix-up et n'est pas une forme standard de codage. Ceci est généralement nécessaire lorsque vous êtes en acceptant potentiellement mal formé Uri à partir de la saisie de l'utilisateur, mais ce n'est pas une opération standardisée et je ne sais pas du tout intégré dans Java fonction de bibliothèque qui va le faire pour vous; vous pouvez avoir à pirater quelque chose de vous-même avec une RegExp.
Dans l'autre sens, vous devez prendre votre URI à l'écart, dans ses composantes (chaque chemin séparé de la partie, paramètre de requête de nom et de valeur, et ainsi de suite) avant de vous pouvez ne pas encoder chaque partie (à l'aide d'un URLDecoder). Il n'y a pas de meilleure façon de %-décodage d'un ensemble d'URI en une seule fois; vous pourriez essayer de "décoder %débutant qui ne décode pas de délimiteurs" (comme /?=&;%), mais vous pouvez être laissé avec un étrange incompatible chaîne qui n'est pas conforme à toutes les URI de traitement standard.
URLEncoder/URLDecoder sont très bien pour la manipulation de l'URI de la requête composants, à la fois des noms et des valeurs. Cependant, ils ne sont pas assez droit pour la manipulation chemin de l'URI partie des composants. La différence est que le caractère ‘+’ ne signifie pas un espace dans le chemin d'accès de la partie. Vous pouvez résoudre ce problème avec une simple chaîne de remplacement: après Encodage, remplacer le ‘+’ à ‘%20’; avant URLDecoding, remplacer " + " par " %2B’. Vous pouvez ignorer la différence si vous ne prévoyez pas d'inclure des segments contenant des espaces ou des points positifs dans votre chemin.
La javadoc vous recommandons d'utiliser le java.net.Classe URI pour procéder à l'encodage.
Pour s'assurer que la classe URI correctement le code de l'url, l'un des multi-argument des constructeurs doit être utilisé. Ces constructeurs va réaliser l'encodage, mais vous obliger à analyser toute la chaîne d'url dans les paramètres.
Si vous voulez décoder, vous devez construire l'URI avec le seul argument du constructeur, qui ne fait pas n'importe quel encodage. Vous pouvez ensuite appeler des méthodes telles que getPath (), etc. afin de récupérer et de construire la décodé URL.
Utilisation java.net.URLEncoder et java.net.URLDecoder.