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

          URL編碼

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

          主站蜘蛛池模板: 临清市| 开平市| 玉山县| 枝江市| 门头沟区| 习水县| 洛扎县| 镇坪县| 达日县| 施秉县| 宜州市| 广元市| 砀山县| 遂昌县| 盐池县| 栖霞市| 米脂县| 厦门市| 子长县| 广饶县| 安顺市| 扎鲁特旗| 恩施市| 西城区| 金山区| 邛崃市| 北辰区| 抚顺市| 四子王旗| 浙江省| 夏津县| 南康市| 孟州市| 长寿区| 东乡县| 淮南市| 滦南县| 宜兰县| 晋宁县| 嘉鱼县| 丽水市|