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

          URL編碼

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

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

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

          主站蜘蛛池模板: 天津市| 米脂县| 泰顺县| 蒙自县| 临桂县| 璧山县| 特克斯县| 沙田区| 双辽市| 辽阳县| 广昌县| 开化县| 化德县| 唐海县| 阿拉善盟| 扎赉特旗| 闽清县| 墨玉县| 四会市| 广灵县| 八宿县| 吉水县| 海兴县| 施秉县| 乾安县| 南雄市| 长海县| 普宁市| 屏东县| 洪江市| 元江| 铁岭县| 奉节县| 和田县| 宣城市| 天峻县| 临湘市| 威远县| 中方县| 南康市| 东阳市|