2016-04-26 26 views
3

我想从Javascript中的URL读取获取参数。我发现this在Javascript中获取URL参数不适用于urlencoded'&'

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

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

回答

4

您需要拨打decodeURIComponent并在sParameterName[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的评论中提到。

+0

非常感谢!哦,我没有阅读Zakinster的评论。一个错误在我身边。 *UPS* – progNewbie