kalman03

          每天早上看一遍《福布斯》富翁排行榜,如果上面沒有我的名字,我就去學習......
          隨筆 - 22, 文章 - 0, 評論 - 86, 引用 - 0
          數據加載中……

          地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況

          HTTP標準的兩種請求方式:Post和Get,關于這兩種請求方式的區別相關資料云集,這里不做闡述。然而,你是否注意到:
          我們通過get方式從瀏覽器的地址欄傳遞數據給服務器,當參數的值中含有某些特殊轉義字符的時候,沒經過些許處理將得不到預期的結果。

          例如:
          當我們的請求的url為:
          http:
          //localhost:8080/index.jsp?parameter=kalman03#kalman#1
          或許你預期在服務器端獲得的parameter的結果為kalman03#kalman#1,錯!!!實際上得到parameter的值為kalman03。
          這究竟是為什么呢?
          原因:
          parameter的值含有特殊字符#,瀏覽器自動截斷#字符和其后面的值,這樣得到的值就為kalman03。
          推廣:
          當參數值中含有特殊字符 
          ?!=()#%& 的時候,獲得的值同樣也會出現與預期結果不一致的情況。
          解決方案:
          方法1:通過post方式傳遞數據;
          方法2:對參數進行一次編碼parameter
          =escape(parameter);

          第一種解決方案不解釋也能明白,現在解釋下第二種方法的處理:
          JavaScript escape() 函數的功能是把其中某些字符替換成了十六進制的轉義序列。該方法不會對ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。其他所有的字符都會被轉義序列替換。具體參考:http://www.w3school.com.cn/js/jsref_escape.asp.
          這樣來就不會出現自動截斷或者其他意想不到的效果。

          posted on 2009-10-17 02:04 kalman03 閱讀(5255) 評論(4)  編輯  收藏 所屬分類: JSP/ServletJavaScript/Css

          評論

          # re: 地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況  回復  更多評論   

          其他所有的字符都會被轉義序列替換
          2009-10-18 20:25 | 樂蜂網

          # re: 地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況  回復  更多評論   

          最好也不包含+

          例如.jsp?parameter=kalman03+kalman+1
          2009-10-19 09:22 | charlie's logic

          # re: 地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況  回復  更多評論   

          地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況 good
          2009-10-20 03:28 | 美容

          # re: 地址欄(get方式)傳值不能不說的秘密-當傳遞的值中含某些特殊字符的情況  回復  更多評論   

          131
          2015-08-04 17:59 | 11
          主站蜘蛛池模板: 连南| 准格尔旗| 瓦房店市| 东乌珠穆沁旗| 广西| 大丰市| 石屏县| 元江| 汉阴县| 左贡县| 宣威市| 镇远县| 宣城市| 介休市| 南通市| 靖边县| 古田县| 太白县| 定陶县| 巴林右旗| 乐山市| 交口县| 都匀市| 台北县| 浦城县| 剑阁县| 晴隆县| 永和县| 庆云县| 白朗县| 富平县| 富蕴县| 呼图壁县| 乌兰浩特市| 萍乡市| 中超| 搜索| 桂平市| 分宜县| 商都县| 平利县|