URLEncode

爲何請求時,須要使用URLEncode作encode轉碼操做?

發現如今幾乎全部的網站都對url中的漢字和特殊的字符,進行了urlencode操做, 也就是:apache

http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/安全

這個樣子,中間%形式的,確定就是個人登陸用戶名稱了吧。服務器

爲何對這些字符進行了u的編碼形式,是爲了字符編碼(gbk、utf8)仍是爲了避免出現特殊的字符在url中?都知道要轉,可是轉了的真正好處呢。查看了網上的不少資料,也沒有找到更加準確的說法。app

url轉義其實也只是爲了符合url的規範而已。由於在標準的url規範中中文和不少的字符是不容許出如今url中的。網站

那哪些字符是須要轉化的呢?編碼

  1. ASCII 的控制字符url

這些字符都是不可打印的,天然須要進行轉化。spa

  1. 一些非ASCII字符.net

這些字符天然是非法的字符範圍。轉化也是理所固然的了。code

  1. 一些保留字符

很明顯最多見的就是「&」了,這個若是出如今url中了,那你認爲是url中的一個字符呢,仍是特殊的參數分割用的呢?

  1. 就是一些不安全的字符了。

例如:空格。爲了防止引發歧義,須要被轉化爲「+」。

明白了這些,也就知道了爲何須要轉化了,而轉化的規則也是很簡單的。

按照每一個字符對應的字符編碼,不是符合咱們範圍的,通通的轉化爲%的形式也就是了。天然也是16進制的形式。

和字符編碼無關

經過urlencode的轉化規則和目的,咱們也很容易的看出,urleocode是基於字符編碼的。一樣的一個漢字,不一樣的編碼類型,確定對應不一樣的urleocode的串。gbk編碼的有gbk的encode結果。

apache等服務器,接受到字符串後,能夠進行decode,可是仍是沒法解決編碼的問題。編碼問題,仍是須要靠約定或者字符編碼的判斷解決。

所以,urleocode只是爲了url中一些非ascii字符,能夠正確無誤的被傳輸,至於使用哪一種編碼,就不是eocode所關心和解決的問題了。

 

詳細http://www.javashuo.com/article/p-hssgmisr-hk.html

Java中轉化

URLEncode和URLDecode用於完成普通字符串和 application/x-www-from-urlencoded MIME字符串之間的相互轉化

若是傳遞的字符串中包含非西歐字符的字符串,會被轉化成%XX%XX XX爲十六進制的數字

try { // 將application/x-www-from-urlencoded字符串轉換成普通字符串 
            String keyWord = URLDecoder.decode("%C4%E3%BA%C3", "GBK"); System.out.println(keyWord); //輸出你好 // 將普通字符創轉換成application/x-www-from-urlencoded字符串 
            String urlString = URLEncoder.encode("你好", "GBK");  //輸出%C4%E3%BA%C3
 System.out.println(urlString); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block
 e.printStackTrace(); } 
相關文章
相關標籤/搜索