js獲取當前url地址參數中文亂碼問題


  不知道從什么時候起,百度出來的回答大部分都是博客園的文章了,就拿本章的問題查找的答案來說,內容大部分沒區別,而且所答非所問,明明帖子的問題是url地址欄的中文亂碼問題,但是回答的都什么雲里霧里的,復制粘貼也不粘點質量高的。

  項目中的頁面跳轉后獲取url參數的問題,因為是抽取出來的放到獨立頁面上的模塊,貌似沒辦法用 angular 本身自帶的 $stateParams 來獲取跳轉攜帶參數,只能通過當前頁面的url獲取,window.location.href 。

  項目中支持通話列表表格內容單項雙擊跳轉打開新頁面,后來抽出獨立頁面也支持了url地址欄直接輸入接口跟參數直接跳轉,參數也有中文情況,傳輸中文時遇到了點小問題:前台底層獲取的url的中文是亂碼。

  開始以為是后台請求接口時,中文參數轉碼有問題,前台是有封裝一個獲取並整理url參數到一個對象的方法的,輸出后的對象中對應中文的屬性值完全是亂碼,怎么辦呢?解吧,decodeURI,沒解開。后來看封裝好的獲取參數整理成一個對象的方法時,發現了問題,居然將獲取的值進行了兩次轉碼,好坑呀~

  這里記錄一下前台解析url整理成對象的方法。

 

//首先獲取到當前頁面的地址欄信息
var url = window.location.href;
console.log(url);

var obj = {};
var reg = /\?/;
if(url.match(reg)) {
    //判斷傳入參數,以問號截取,問號后是參數
    var chars = url.split('?')[1];

    //再截&號
    var arr = chars.split('&');

    //獲得截取后的數組為鍵值對字符串
    for (var i = 0; i < arr.length; i++) {

        //保守一點確定看是否為 name=value形式
        var num = arr[i].indexOf("=");

        if (num > 0) {
            //拼接字符串
            var name = arr[i].substring(0, num);
            var value = arr[i].substr(num + 1);

            //拼接對象,並轉碼
            obj[decodeURIComponent(name)] = decodeURIComponent(value);
        }
    }
}
console.log(obj);

 

最后存儲對象屬性時,可以不對 name 進行轉碼,因為一般 name 都為 key 值,通過使用 key 來獲得其對應的 value ,所以 value 的值才是廣泛的多樣的,會有中文值的可能,但是估計不會有后台將 key 值也存成中文,誰見過鍵值對中 key 是用中文來使用的?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM