1. 避免解析錯誤
我們的 querystring 的形式是使用 ?開始, key=value 傳遞引數, key-value pairs 之間使用 & 連線.
比如:
?postid=5038412&t=1450591802326
伺服器會
根據 & 解析 key-value pairs
根據 = 解析 key,value
那麼如果 key或者 value 中存在 =,&, 那麼就會解析掛掉,
比如 寶潔公司叫做 p&g
?name=p&g&t=123456
伺服器解析的時候就會解析錯誤:
name=p
g //到這裡就掛掉了
2. 避免非法字元
url 只能使用 ascii 字符集, 所有的非 ascii 碼都算是非法字元.
在這個定義中, 所有的中文都算是非法字元.
一般使用的是 百分號編碼(percent-encoding)
規則:
是否是 ascii 字元
是取對應的位元組編號, 比如 'a' 對應的是 '0x61', 那麼編碼之後就是 %61
否使用 utf-8 對其進行編碼
比如"中文"使用utf-8字符集得到的位元組為 0xe4 0xb8 0xad 0xe6 0x96 0x87,
經過url編碼之後得到"%e4%b8%ad%e6%96%87".
瀏覽器會預設給 url 編碼, 但是不同瀏覽器的編碼實現方式不一致, 所以最好的方式就是:
我們自己通過 js 對 url 進行編碼
js 用來編碼的函式有 3 個:
// escape() // 不推薦使用, 原因不明.
encodeuri()
encodeuricomponent()
encodeuri 會對整個 url 中的非法字元編碼 (它是為了解決非法字元)
encodeuricomponent 會對所有的保留字都編碼 (解決解析錯誤的問題)
所以最終的編碼方式是:
對每乙個 key-value 進行 encodeuricomponent 編碼
對整個 url 進行 encodeuri 編碼
備註:url 中的字元可以分成三類:
保留字元 (reserved characters):
這類字元是uri中的保留關鍵字元,它們用於分割uri中的各個部分。
這些字元是: ;, /, ?, :, @, &, =, +, $, ,
mark字元 (mark characters)
這類字元在rfc-2396中特別定義,但是沒有特別說明用途,可能是和別的rfc標準相關。
這些字元是:-, _, ., !, ~, *, ', (, )
普通字元
url 編碼解碼的問題
既然瀏覽器會預設給 url 進行編碼, 那麼伺服器就會預設給url 解碼。
如果我們僅僅是對 url 進行 encodeuri, 那麼伺服器在解碼的時候可以正常, 但是解析的時候依舊不能
區分 & 到底是分割符還是 value 中的乙個普通字元, 所以我們需要對 key-value pairs 進行編碼的.
最終結論
使用 encodeuricomponent 避免引數解析錯誤
使用 encodeuri 避免非法字元
js中的url編碼
看下邊這個url串 1 back 在go頁面用c 的request.querystring肯定無法獲取正確的back引數.back的引數值會是 而js呼叫go頁面時就需要對back引數裡的url串進行url編碼才行.escape 方法 採用iso latin字符集對指定的字串停止編碼。所有的空格符 ...
js中的url編碼
看下邊這個url串 1 back 在go頁面用c 的request.querystring肯定無法獲取正確的back引數.back的引數值會是 而js呼叫go頁面時就需要對back引數裡的url串進行url編碼才行.escape 方法 採用iso latin字符集對指定的字串停止編碼。所有的空格符 ...
URL中的編碼問題
文章 自 路徑編碼採用utf 8 查詢字串編碼和作業系統編碼一致 get和post方法用的是網頁的編碼 ajax呼叫的url包含漢字,ie採用gb2312 作業系統的預設編碼,gbk相容gb2312 firefox和google採用utf 8 對於以上統一處理的辦法就是在js中對url編碼,可以用e...