posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          URL編碼

          Posted on 2007-09-07 15:34 semovy 閱讀(460) 評論(0)  編輯  收藏 所屬分類: JAVA基礎(chǔ)

          什么是URL編碼? 當瀏覽器訪問www服務(wù)器上的網(wǎng)頁文件時,需要使用HTTP協(xié)議進行通信,在HTTP協(xié)議中,瀏覽器不能向服務(wù)器直接傳遞某些特殊字符,就必須對這些字符進行URL編碼再傳送,其規(guī)則如下:
          1.將空格轉(zhuǎn)換成加號(+);
          2.對0~9,a~z,A~Z之間的字符保持不變;
          3.對于其他的所有字符,用這個字符的當前字符集編碼在內(nèi)存中的十六進制格式表示,并在每個十六進制字節(jié)前加上一個百分號"%",例如,字符"+"用%2B表示,每個只用GB2312編碼的中文字符在內(nèi)存中的占兩個字節(jié),字符"中"用%D6%D0表示.值得注意的是,同一個中文字符在不同的字符集編碼方式下,在內(nèi)存中的編碼值也是不一樣的,一個字符的URL編碼是針對字符在內(nèi)存中的編碼值而言的,采用不同編碼的同一個字符的URL編碼結(jié)果是不一樣的.

          在JAVA API中的java.net包中提供了URLEncoder和URLDecoder兩個類,供我們方便實現(xiàn)URL編碼和解碼.下面來看幾個小例子:
          1.對于空格也可以直接使用其十六進制編碼方式,即用%20表示,而不是轉(zhuǎn)換成+號,按照上面說的第三條,很顯然%20是可以解碼成空格的.如下兩個URL字符串的效果是一樣的:
          http://www.baidu.com/search.html?name=a+b&password=123
          http://www.baidu.com/search.html?name=a%20b&password=123
          2.如果確信URL串中的特殊字符不會引起歧義,也可以不對它們進行編碼,例如:
          http://www.baidu.com/search.html?name=中國&password=123
          http://www.baidu.com/search.html?name=%D6%D0%B9%FA&password=123
          上面的兩個URL字符串,不管是否對其進行URL編碼,結(jié)果都是一樣的,注意:雖然規(guī)定了除數(shù)字和英文字符不對其URL編碼,但這并不等于必須對其URL編碼,只有在有可能引起歧義或沖突時才是必需的.看下面的例子:
          如果要傳遞的name是"中+國",如果不對其進行URL編碼,服務(wù)器就會認為傳過來的是"中 國"."中&國"如果不進行URL編碼就傳給服務(wù)器變成了
          http://www.baidu.com/search.html?name=中&國&password=123
          我們知道,&這個字符在URL中是有特殊含義的.所以這個查詢字符串的服務(wù)器端就被分成三段來解釋.這樣就不可能達到預(yù)期的結(jié)果.所以對這樣的字符就必須進行URL編碼.

          主站蜘蛛池模板: 郧西县| 芦溪县| 高碑店市| 灵川县| 进贤县| 于田县| 信阳市| 河北区| 盘锦市| 汕尾市| 吉木乃县| 潜山县| 安阳市| 英德市| 营山县| 阿合奇县| 枣庄市| 玛沁县| 且末县| 洛浦县| 化州市| 郯城县| 霍山县| 富阳市| 石楼县| 会理县| 利津县| 深水埗区| 华坪县| 福鼎市| 股票| 忻城县| 阿拉善盟| 伊吾县| 新安县| 卢龙县| 新昌县| 佛冈县| 云龙县| 楚雄市| 尼木县|