URL参数解析与反解析

url  ==转>>  参数
function toQueryParams(url){
    url = url || window.location.href
    var search = url.replace(/^\s+/,'').replace(/\s+$/,'').match(/([^?#]*)(#.*)?$/);
    if(!search){
        return {};
    }
    var searchStr  = search[1];
    var searchHash = searchStr.split('&');

    var ret = {};
    searchHash.forEach(function(pair){
        var temp = '';
        if(temp = (pair.split('=',1))[0]){
            var key   = decodeURIComponent(temp);
            var value = pair.substring(key.length + 1);
            if(value != undefined){
                value = decodeURIComponent(value);
            }
            if(key in ret){
                if(ret[key].constructor != Array){
                    ret[key] = [ret[key]];
                }
                ret[key].push(value);
            }else{
                ret[key] = value;
            }
        }
    });
    return ret;
}

// params  ==>>  queryString
function toQueryPair(key, value) {
    if (typeof value == 'undefined'){
        return key;
    }
    return key + '=' + encodeURIComponent(value === null ? '' : String(value));
}
function toQueryString(obj) {
    var ret = [];
    for(var key in obj){
        key = encodeURIComponent(key);
        var values = obj[key];
        if(values && values.constructor == Array){//数组
            var queryValues = [];
            for (var i = 0, len = values.length, value; i < len; i++) {
                value = values[i];
                queryValues.push(toQueryPair(key, value));
            }
            ret = ret.concat(queryValues);
        }else{ //字符串
            ret.push(toQueryPair(key, values));
        }
    }
    return ret.join('&');
}
posted @ 2017-06-21 17:38  阿席巴i  阅读(424)  评论(0)    收藏  举报