一、問題的由來 : http://www.ruanyifeng.com/blog/2010/02/url_encoding.htmlhtml
二、網絡標準RFC 1738作了硬性規定: 只有字母和數字[0-9a-zA-Z]、一些特殊符號"$-_.+!*'(),"[不包括雙引號]、以及某些保留字,才能夠不通過編碼直接用於URL。瀏覽器
基於這個標準,因此瀏覽器必須對規定之外的字符進行編碼。問題是不一樣的瀏覽器編碼的規範是不同的,後臺解析的不可能把全部狀況的考慮進去。網絡
因此須要經過js 進行統一的編碼,這樣使得 url 符合 標準了,瀏覽器就沒有插手 編碼的就會了。函數
三、js 編碼方法:編碼
a、escape:實際上,escape()不能直接用於URL編碼,它的真正做用是返回一個字符的Unicode編碼值。好比"春節"的返回結果是 %u6625%u8282 。(已經不提倡使用了)url
b、encodeURI:是 真正用來對URL編碼的函數。所以除了常見的符號之外,對其餘一些在網址中有特殊含義的符號 "; / ? : @ & = + $ , #",也不進行編碼。spa
若是 encodeURI 不編碼的部分(如 = 號)放在參數中,就會打亂 url 的 解析的結果。因此須要 encodeURIComponent 把參數中encodeURI 不編碼的部分編碼掉。code
c、encodeURIComponent: 它用於對URL的組成部分進行個別編碼,而不用於對整個URL進行編碼。htm
"; / ? : @ & = + $ , #",這些在encodeURI()中不被編碼的符號,在encodeURIComponent()中通通會被編碼。blog