在項目開發中,我們有時往往需要向地址欄傳遞參數,有時也需要獲取地址欄里的參數,獲取英文或數字的方法,我相信大家都不陌生,可是如果是中文呢,小萌用同樣的方法獲取中文的時候出現了亂碼……/(ㄒoㄒ)/~~那么今天小萌分享下關于地址欄傳遞的中文參數,獲取出現亂碼的解決方法。

首先我們來簡單介紹下一般情況下,用JS獲取地址欄參數的方法:

function GetQueryString(name){
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]);
     return null;
}

調用方法:GetQueryString(“參數名”)就可以啦。

用上面的方法獲取中文的時候,會出現亂碼的現象,這是編碼問題在作祟,原來客戶端默認使用javascript的encodeURI函數對URL進行編碼,在解碼的時候就需要使用decodeURI 而不是 unescape。所以想要獲取中文并且不出現亂碼使用以下代碼即可:

function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if(r != null) return decodeURI(r[2]);
    return null;
}

在查找解決問題方法的時候,看到有人說把decodeURI替換為decodeURIComponent也可使用。小萌不明所以,就百度了一下兩者的區別。

這兩個函數可以對特定函數生成的密碼字符串進行解密操作,就可以生成為未解密的字符串,比較實用,下面來看看這兩個函數的用法:

decodeURI()定義和用法:decodeURI() 函數可對 encodeURI() 函數編碼過的URI 進行解碼。

  • 語法:decodeURI(URIstring)
  • 參數 描述:URIstring 必需。一個字符串,含有要解碼的 URI 或其他要解碼的文本。
  • 返回值:URIstring 的副本,其中的十六進制轉義序列將被它們表示的字符替換。

decodeURIComponent()定義和用法:decodeURIComponent() 函數可對 encodeURIComponent() 函數編碼的 URI 進行解碼。

  • 語法:decodeURIComponent(URIstring)
  • 參數 描述:URIstring 必需。一個字符串,含有編碼 URI 組件或其他要解碼的文本。
  • 返回值:URIstring 的副本,其中的十六進制轉義序列將被它們表示的字符替換。

以上就是兩者用法的說明,小伙伴兒說這不是一樣的嘛,其實看似一樣,但是在實際的使用過程中有一個問題:兩者對于@ 、 /等特殊符號進行進行編碼傳遞參數的時候有一些不一樣。

到這里呢,就是我在項目當中解決獲取地址欄傳遞過來的參數亂碼問題的方法,希望通過分享可以幫助到一些小伙伴。