获取 URL-Javascript 中的参数不适用于 urlencoded '&'

Get URL-Parameter in Javascript doesn't work with urlencoded '&'

我想从 Javascript 中的 URL 读取一个获取参数。我发现 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

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

您需要在 sParameterName[0]sParameterName[1] 上调用 decodeURIComponent,而不是在整个 search.substring(1)) 上调用 decodeURIComponent

(即在它的 组件 上)

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 对您 link 的回答的评论中提到了这一点。