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

          URL編碼

          Posted on 2007-09-07 15:34 semovy 閱讀(451) 評論(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編碼.

          主站蜘蛛池模板: 米易县| 白玉县| 蓝山县| 深圳市| 海门市| 科技| 高邑县| 开鲁县| 丰镇市| 车致| 同心县| 县级市| 长垣县| 徐汇区| 阿勒泰市| 崇义县| 高邮市| 博湖县| 新余市| 金山区| 新蔡县| 田阳县| 伽师县| 清原| 灌南县| 郑州市| 永川市| 盐池县| 萨嘎县| 平罗县| 黄平县| 天水市| 玛多县| 永顺县| 渝中区| 高青县| 衡南县| 嘉兴市| 河西区| 望城县| 北安市|