编码和解码rfc2396 URL

时间:2008-11-20 09:49:45

标签: java rfc2396

对URL字符串进行编码的最佳方法是什么,使它们符合rfc2396并解码符合rfc2396的字符串,例如将%20替换为空格字符?

编辑: URLEncoder和URLDecoder类执行编码/解码符合rfc2396的URL,它们编码为MIME类型application / x-www-form-urlencoded,用于编码HTML表单参数数据。

4 个答案:

答案 0 :(得分:12)

使用URI类,如下所示:

URI uri = new URI("http", "//www.someurl.com/has spaces in url", null);
URL url = uri.toURL();

或者如果你想要一个字符串:

String urlString = uri.toASCIIString();

答案 1 :(得分:2)

您的组件部分(可能包含必须转义的字符)应该在连接到URI之前使用URLEncoder进行转义。

如果你有一个带有带外字符的URI(如空格,“<> [] {} \ | ^`和非ASCII字节),那它实际上不是一个URI。你可以试试通过手动%-escaping修复它们,但这是一个最后的修复操作,而不是标准的编码形式。当你从用户输入接受可能格式错误的URI时,这通常是必要的,但它不是标准化的操作,我不知道任何内置的Java库函数会为你做这件事;你可能不得不用RegExp自己解决一些问题。

在另一个方向上,您必须将URI拆分为其组成部分(每个单独的路径部分,查询参数名称和值等),然后才能覆盖每个部分(使用URLDecoder)。没有明智的方法可以一次性对整个URI进行编码;您可以尝试“解码不解码为分隔符的%-escapes”(例如/?=&amp ;;%)但是您将留下一个不符合任何URI处理标准的奇怪的不一致字符串。

URLEncoder / URLDecoder适用于处理URI查询组件,包括名称和值。但是,它们完全正确处理URI路径部分组件。区别在于'+'字符并不意味着路径部分中的空格。您可以使用简单的字符串替换来解决此问题:在URLEncoding之后,将'+'替换为'%20';在URLDecoding之前,将'+'替换为'%2B'。如果您不打算在路径中包含包含空格或加号的段,则可以忽略差异。

答案 2 :(得分:1)

javadocs建议使用java.net.URI类来完成编码。 要确保URI类正确编码url,必须使用其中一个多参数构造函数。这些构造函数将执行所需的编码,但要求您将任何url字符串解析为参数。

如果要解码,则必须使用单个参数构造函数构造URI,该构造函数不执行任何编码。然后,您可以调用getPath()等方法来检索和构建解码后的URL。

答案 3 :(得分:-3)