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
          主站蜘蛛池模板: 海伦市| 延安市| 泰安市| 筠连县| 公安县| 洛川县| 巴塘县| 白银市| 阿巴嘎旗| 凤台县| 乐安县| 井冈山市| 灵川县| 犍为县| 鹰潭市| 兴宁市| 太仓市| 镇坪县| 屯昌县| 五台县| 渑池县| 吴江市| 福贡县| 朝阳县| 茂名市| 清苑县| 昌乐县| 鹤庆县| 平利县| 泸定县| 靖远县| 丽江市| 清原| 莫力| 同德县| 宝兴县| 鹤峰县| 新泰市| 新昌县| 运城市| 桐梓县|