使用java编码URL并替换%20或其他特殊字符
我希望对URL进行编码,以正确的方式替换诸如“”(空格)之类的特殊字符(%20表示空格)。我在网上找到的解决方案没有一个像预期的那样有效 我尝试使用apache commons:使用java编码URL并替换%20或其他特殊字符,java,url,encoding,web,Java,Url,Encoding,Web,我希望对URL进行编码,以正确的方式替换诸如“”(空格)之类的特殊字符(%20表示空格)。我在网上找到的解决方案没有一个像预期的那样有效 我尝试使用apache commons: import org.apache.commons.lang.StringEscapeUtils; public class MyTest { public static void main(String[] args) { String bla="http://www.bla.com/
import org.apache.commons.lang.StringEscapeUtils;
public class MyTest {
public static void main(String[] args) {
String bla="http://www.bla.com/bla.php?par1=bla bla bla";
System.out.println(StringEscapeUtils.escapeHtml(bla));
}
}
但它的回报是:
http://www.bla.com/bla.php?par1=bla bla bla
http://www.bla.com/bla.php?par1=bla bla bla
我尝试使用java.net.URL:
import java.net.MalformedURLException;
import java.net.URL;
public class MyTest {
public static void main(String[] args) throws MalformedURLException {
String bla="http://www.bla.com/bla.php?par1=bla bla bla";
URL url = new URL(bla);
System.out.println(url);
}
}
但它的回报是:
http://www.bla.com/bla.php?par1=bla bla bla
http://www.bla.com/bla.php?par1=bla bla bla
我希望:
http://www.bla.com/bla.php?par1=bla%20bla%20bla
有什么办法吗?借助
URL
类,尝试拆分成URI
:
String sUrl = "http://bla.com:8080/test and test/bla.php?query=bla and bla";
URL url = new URL(sUrl);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String canonical = uri.toString();
System.out.println(canonical);
输出:
http://bla.com:8080/test%20and%20test/bla.php?query=bla%20and%20bla
您尝试过URLEncoder吗?是的。如果sUrl中的任何内容已被百分比编码,那么这可能会导致双重编码。有什么办法解决这个问题吗?