天天看點

java url 20_java - 使用Java編碼URL并替換%20或其他特殊字元

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