Java 如何正确编码完整的http url字符串?

Java 如何正确编码完整的http url字符串?,java,urlencode,Java,Urlencode,我从用户处获取url字符串,并希望将其转换为合法的http url: “五个”应该变成“” 但是,URLEncoder没有帮助,因为它编码整个字符串(包括合法的“:/”) 帮助?使用URL类。例如: URL url = new URL(urlString); String encodedQueryString = URLEncoder.encode(url.getQuery()); String encodedUrl = urlString.replace(url.getQuery(), enc

我从用户处获取url字符串,并希望将其转换为合法的http url:

五个”应该变成“

但是,URLEncoder没有帮助,因为它编码整个字符串(包括合法的“:/”)


帮助?

使用
URL
类。例如:

URL url = new URL(urlString);
String encodedQueryString = URLEncoder.encode(url.getQuery());
String encodedUrl = urlString.replace(url.getQuery(), encodedQueryString);
第三行可能不同-例如,从其所有部分构造一个新的
URL

使用外部库:

import org.apache.commons.httpclient.util.URIUtil;
String myUrl_1= "http://one.two/three?four five";
System.out.println(URIUtil.encodeQuery(myUrl_1));
以及输出:

http://one.two/three?four%20five
http://stackoverflow.com/search?q=%3Cscript%3Ealert(1)%3C/script%3E%20s

还有Maven依赖

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

commons httpclient
commons httpclient
3.1

我们是否应该对查询参数分隔符进行编码,如
=
<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>