GET請求中參數含有某些特殊字符的處理

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.
這樣來就不會出現自動截斷或者其他意想不到的效果。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章