Java URL encoding of query string parameters
(11个答案)
6年前关闭。
我想以一种正确的方式(例如在空格的情况下为%20)替换特殊字符(例如“”(空格))来编码URL。我在网上找到的解决方案中没有一个能按预期工作。
我尝试使用Apache Commons:
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
我尝试使用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%20bla%20bla
有什么办法吗?
最佳答案
尝试借助URI类拆分为URL: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