1. 程式人生 > >URL傳遞多個參數遇到的bug

URL傳遞多個參數遇到的bug

什麽事 瀏覽器 發生 總結 知識點 code 進行 中文 cape

bug所在:

  通過URL傳遞多個參數的時候,其一是中文出現亂碼,其二是空格被“%20”替代;

  原因分析:原理暫時還不清楚,後續再研究下原理,只知道有中文的時候就會出現亂碼;%20是url空格的編碼;

提到編碼,就得來簡單了解下(周末再詳細補充下知識)編碼的幾種格式:

一:ASCII碼,美國標準信息交換碼,只有7位.

二:UTF-8:是一種針對Unicode的可變長度字符編碼,用1-6個字節 編碼Unicode字符.

三:ISO-8859-1,是瀏覽器默認編碼,包含了西方歐洲語言不可缺少的附加字符,它是單字節碼,向下兼容ASCII.

  解決辦法:傳遞url的時候通過兩次decodeURL編碼:encodeURL(encodeURL(url))(為什麽要經過兩次呢,每次編碼到底發生了什麽事情呢?第一次encodeURL,按照utf-8獲取多字節字符將其一一遍歷成單字節字符,第二次encodeURL,進行編碼)而在另一個頁面中(如:2017-07-03 22:52:10)這種格式的時候,由於有空格,所以就出現了這種結果:2017-07-03%2022:52:10,如何搞呢,這麽搞:encodeURL(2017-07-03%2022:52:10)就回來了(2017-07-03 22:52:10)。

查了下資料,這其中涉及到一個知識點:

編碼和解碼的三種方式:

一:encodeURL(url)/decodeURL(url):主要用於整個URL,不會對本身屬於URL的特殊字符進行編碼,如 : , / , ? , # 等等,

二:encodeURLComponent()/decodeURLComponent()主要用於URL的某個字段,會對任何非標準字符進行編碼,所以平時用的地方比較多

三:escape()/unescape(),只能編碼ASCII碼,已經廢棄,所以不用考慮它啦;

記錄開發中的每一個bug,進步從對bug的思考總結開始!

  

URL傳遞多個參數遇到的bug