2013-07-12 23 views
2

說我有一個URL的空間,什麼是正確的方法來將其轉換爲%20?請不要'取代'建議。在Java中,如何獲得規範化的網址

例如,如果你把「http://test.com/test和測試/ a」的瀏覽器窗口,將其轉換爲http://test.com/test%20and%20test/a

如果我使用URLEncoder的,我得連/轉換。這不是我想要的。

謝謝,

這是正確的方式,好像。添加到問題中,如果在路徑中還有一些非ASCII代碼,我想用utf8編碼轉換爲有效的url,該怎麼辦?例如:test.com:8080/test和test /pierlag2_carré/ a?query =世界我希望它被轉換爲test.com:8080/test%20and%20test/pierlag2_carr%C3%A9/a?query= %E4%B8%96%E7%95%8C

+1

在構建URL之前,您應該對需要編碼的URL部分進行編碼。 –

回答

3

在Java中建立URL的正確方法是創建一個URI對象並填寫URL的每個部分。 URI類處理URL的不同部分的編碼規則,因爲它們各不相同。

URLEncoder是不是你想要的,儘管它的名字,因爲它實際上是HTML表單編碼。

編輯:

根據您的意見,您收到的網址輸入到您的應用程序並不會控制初始生成的URL。您目前遇到的真正問題是您收到的輸入URL(URL)不是有效的URL。每個規範的URL/URI不能包含空格(因此瀏覽器中的%20)。

既然你在無效的輸入無法控制你將被迫進入的URL拆分成其組成部分:

  • 方案
  • 主機
  • 路徑

然後您將不得不拆分路徑並分別對每個部分進行編碼,以確保您不會無意中編碼劃定路徑片段的/

最後,您可以將所有這些對象放回到一個URI對象中,然後將它們傳遞給您的應用程序。

+0

但我的情況是,網址是輸入,不屬於我...... – user1992313

+0

@ user1992313 - 這就是URI類的create(String uri)方法的用途。 – gregwhitaker

+0

當你傳遞一個帶有空格的url時,URI.create實際上會拋出異常 – user1992313

-3

您可能會發現有用的代碼替換您的網址空格:與URL類的幫助

String myUrl = "http://test.com/test and test/a"; 
myUrl = myUrl.replaceAll(" ", "%20"); 

URI url = new URI(myUrl); 
System.out.print(url.toString()); 
+3

是不是這個提問者告訴我們他不想要的東西? –

+0

它也只處理許多情況之一。 JDK包含一個解決方案。用它。 -1 – EJP

4

嘗試拆分成URI

String sUrl = "http://test.com:8080/test and test/a?query=world"; 
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://test.com:8080/test%20and%20test/a?query=world 
+0

這是正確的方式,看起來像。添加到問題中,如果在路徑中還有一些非ASCII代碼,我想用utf8編碼轉換爲有效的url,該怎麼辦? 如: http://test.com:8080/test和測試/pierlag2_carré/查詢=世界 我希望它轉換爲 http://test.com:8080/test% 20和%20test/pierlag2_carr%C3%A9/a?query =%E4%B8%96%E7%95%8C – user1992313

+0

您可以將該示例添加到您的問題中嗎?該評論正在截斷文本。 – acdcjunior

+0

好的,我在主要問題中添加了全文。 – user1992313