Joh*_*erg 35
URLEncoder有一个非常误导的名字.根据Javadocs使用MIME类型的编码表单参数application/x-www-form-urlencoded.
据说这可以用于编码例如查询参数.例如,如果参数看起来像&/?#其编码的等价物可以用作:
String url = "http://host.com/?key=" + URLEncoder.encode("&/?#");
Run Code Online (Sandbox Code Playgroud)
除非您有这些特殊需求,否则URL javadocs建议使用new URI(..).toURL根据RFC2396执行URI编码 的URL.
管理URL编码和解码的推荐方法是使用URI
以下示例
new URI("http", "host.com", "/path/", "key=| ?/#ä", "fragment").toURL();
Run Code Online (Sandbox Code Playgroud)
产生结果http://host.com/path/?key=%7C%20?/%23ä#fragment.注意如何字符,如?&/被不编码.
有关详细信息,请参阅Java中的帖子HTTP URL地址编码或如何编码URL以避免java中的特殊字符.
编辑
由于您的输入是字符串URL,因此使用其中一个参数化构造函数URI将无法帮助您.你也不能new URI(strUrl)直接使用,因为它没有引用URL参数.
所以在这个阶段我们必须使用技巧来获得你想要的东西:
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();
}
Run Code Online (Sandbox Code Playgroud)
在使用此例程之前,必须清理字符串以确保它表示绝对 URL.我看到两种方法:
猜.http://除非它已经存在,否则前置到字符串.
使用上下文从上下文构造URI new URL(URL context, String spec)
所以你的意思是你想要对 URL 的一部分进行编码,而不是对整个 URL 进行编码。在我看来,您必须将其分解为多个部分,通过编码器传递您想要编码的部分,然后重新组装它以获得整个 URL。
| 归档时间: |
|
| 查看次数: |
25824 次 |
| 最近记录: |