在Javascript中获取URL参数并不适用于urlencoded'&'

时间:2016-04-26 16:01:02

标签: javascript jquery url-encoding

我想从Javascript中的URL读取一个get参数。我找到了this

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : sParameterName[1];
        }
    }
};

问题是,我的参数是:

  

iFZycPLh%Kf27ljF5Hkzp1cEAVR%oUL3 $ MCE和放大器;!@ * XFcdHBb CRyKkAufgVc32 hUni

我已经创建了urlEncode,所以它是这样的:

  

iFZycPLh%25Kf27ljF5Hkzp1cEAVR%25oUL3%24Mce%26%* 40XFcdHBb CRyKkAufgVc32!hUni

但是,如果我调用 getUrlParameter()函数,我只能得到这个结果:

  

iFZycPLh%Kf27ljF5Hkzp1cEAVR%oUL3 $ MCE

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

您需要在decodeURIComponentsParameterName[0]上致电sParameterName[1],而不是在整个search.substring(1))上致电。

(即关于它的组件

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        var key = decodeURIComponent(sParameterName[0]);
        var value = decodeURIComponent(sParameterName[1]);

        if (key === sParam) {
            return value === undefined ? true : value;
        }
    }
};

zakinster对你所链接答案的评论中提到了这一点。