对网址查询参数进行编码
如何对 URL 查询参数值进行编码?我需要用,重音符号,非ASCII字符等替换空格。%20
我试图使用,但它也编码字符,如果我给URL构造函数编码的字符串,我得到一个(无协议)。URLEncoder
/
URLEncoder
MalformedURLException
如何对 URL 查询参数值进行编码?我需要用,重音符号,非ASCII字符等替换空格。%20
我试图使用,但它也编码字符,如果我给URL构造函数编码的字符串,我得到一个(无协议)。URLEncoder
/
URLEncoder
MalformedURLException
URLEncoder
有一个非常误导性的名字。它是根据Javadocs使用的编码形式参数使用MIME类型。application/x-www-form-urlencoded
这样说,它可用于编码,例如查询参数。例如,如果一个参数看起来像其编码的等效参数,则可以用作:&/?#
String url = "http://host.com/?key=" + URLEncoder.encode("&/?#");
除非你有这些特殊需求,否则URL javadocs建议使用新的URI(..)。toURL
,它根据 RFC2396 执行 URI 编码。
管理 URL 编码和解码的推荐方法是使用 URI
以下示例
new URI("http", "host.com", "/path/", "key=| ?/#ä", "fragment").toURL();
产生结果 。请注意如何不对诸如 之类的字符进行编码。http://host.com/path/?key=%7C%20?/%23ä#fragment
?&/
有关详细信息,请参阅在 Java 中发布 HTTP URL 地址编码或如何对 URL 进行编码以避免在 Java 中使用特殊字符。
编辑
由于您的输入是字符串 URL,因此使用 的参数化构造函数之一对您没有帮助。也不能直接使用,因为它不引用URL参数。URI
new URI(strUrl)
所以在这个阶段,我们必须使用一个技巧来获得你想要的东西:
public URL parseUrl(String s) throws Exception {
URL u = new URL(s);
return new URI(
u.getProtocol(),
u.getAuthority(),
u.getPath(),
u.getQuery(),
u.getRef()).
toURL();
}
在使用此例程之前,必须对字符串进行清理,以确保它表示绝对 URL。我看到两种方法:
猜。在字符串前面附加,除非它已经存在。http://
使用新的 URL(URL 上下文,字符串规范)从上下文
构造 URI
所以你说的是你想对你的URL的一部分进行编码,而不是整个事情。在我看来,你必须把它分成几个部分,通过编码器传递你想要编码的那些,然后重新组装它以获得你的整个URL。