2011-04-06 56 views
2

我需要查找URL是否被編碼。由於輸入是動態的,因此如果我知道正則表達式來檢查它將會很有幫助。正則表達式在java中的URL中查找編碼的字符串

示例 -
www.test.com/?t=%E3%83%81%E3%82%B7%E3%83%BA%E3%83%B3%E3%83%9D%E3% 83%BC%E3%83%AB

在此先感謝

+0

你的意思是* encoded *是什麼意思?你能向我們展示一些例子嗎? – 2011-04-06 17:34:55

+0

也許他的意思是,例如,空間變成了「%20」。 ;) – 2011-04-06 17:35:37

+0

輸入什麼?什麼網址?請發佈代碼並解釋您遇到的問題。 – 2011-04-06 17:35:51

回答

2

你可以簡單地使用URLDecoder查詢的網址是否包含編碼部分或沒有,而不是建立一個自定義的正則表達式:

class UrlTest { 
     public static void main(String[] args) throws java.io.UnsupportedEncodingException { 
       String url = "http://example.com/%20foo"; 

       if(url.equals(java.net.URLDecoder.decode(url, "UTF-8"))) { 
         System.out.println("URL didn't contain encoded parts."); 
       } else { 
         System.out.println("URL contained encoded parts.");                                 
       }                                               
     }                                                 
} 
+0

您還應該捕獲IllegalArgumentException。事實上,如果輸入的URL沒有編碼,它可能包含非法字符或字符序列... – 2011-04-06 17:53:08

+0

我需要對已編碼的URL中的任何字符串進行編碼。我不應該編碼整個網址。 – Balaji 2011-04-06 18:01:52

+0

每當文本被URL編碼時都無法辨別 - 它可能包含%20作爲普通內容 – 2012-07-04 14:20:58

-4

只要看看後面是 '%'[0-F] - 你會知道的。

+0

例如,網址是www.test.com/?t=%E3%83%81%E3%82%B7%E3%83%BA%E3%83%B3%E3%83%9D%E3%83% BC%E3%83%AB – Balaji 2011-04-06 17:38:02

+0

真的嗎?沒有更好的答案downvote - 非常有成效。 – Gandalf 2011-04-06 17:38:05

+0

那麼十六進制數字A..F呢? – joschi 2011-04-06 17:38:08

0

如果你問,因爲要的URL編碼,如果它不被編碼,則最容易做的事情是解碼然後重新編碼。這樣你就可以保證編碼的網址。

+0

我需要編碼已編碼的URL中的任何字符串。我不應該編碼整個網址。 – Balaji 2011-04-06 17:57:24

+0

當然,所以構建一個java.net.URL,提取我們所有的組件部分(路徑和查詢字符串),對每個元素進行適當的編碼並將它們再次綁定在一起。 – Joel 2011-04-07 11:44:21

0

//正則表達式嘗試使用任何URL編碼,或爲..目錄遍歷

。*%[0-9a-fA-F] + | \。\。

相關問題