我正在尝试使用this jquery plugin和此示例查询字符串解析查询字符串中的参数:
http://test.com/?xnJTqqWEclJnnPEvWH&cid=3DF3-00-=63-D4-DA-2F-91-6B-39-39-75-E4-C1-B7-28-12&mid=3D93-36-14-46-4D-52-9E-48-17-=6A-50-13-56-FA-0A-06&PROMO_MONTH=3D201106
使用插件的代码:
console.log($.getQueryParam( "cid" ));
cid在“=”符号的第一个实例处被分割 - 所以代替:
3DF3-00-=63-D4-DA-2F-91-6B-39-39-75-E4-C1-B7-28-12
我得到了
3DF3-00-
这是正常行为吗?等号是否在此查询字符串中特别执行某些操作?如果没有,我如何解析这个查询字符串,以便获得整个参数?
答案 0 :(得分:2)
插件本身并不是为了容纳这样的字符串而编写的。罪魁祸首是以下一段代码......
if (params[0] == param) {
return params[1] || '';
}
在此步骤之前不久,插件脚本在等号上执行split()
创建数组。上面的代码片段应该更改为以下内容,以使您的查询检索工作...
if (params[0] == param) {
var paramOut = '';
for (var p = 1; p < params.length; p++) {
paramOut += params[p] + '=';
}
return paramOut.substr(0, paramOut.length - 1); // to remove the trailing equal sign
} else {
return '';
}
如果您仍然对使用它感兴趣,可以使用我的修订修补插件...
(function($){$.getQueryParam=function(param){var pairs=location.search.substring(1).split('&');for(var i=0;i<pairs.length;i++){var params=pairs[i].split('=');if(params[0]==param){var paramOut='';for(var p=1;p<params.length;p++){paramOut+=params[p]+'=';}return paramOut.substr(0, paramOut.length-1);}else{return '';}}return undefined;};})(jQuery);
答案 1 :(得分:2)
请改用gup。我看到它在很多地方使用,效果很好。这很简单。请注意,我在网址中对鞋拔的小提琴进行了一些小改动。下面的代码是您应该实际使用的代码。
http://jsfiddle.net/mrtsherman/trqJ8/
gup('cid');
function gup( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
答案 2 :(得分:1)
是的。 “=”用作查询部分的分隔符,因此您应该将其转义。 Yandex搜索引擎这样做: http://yandex.ru/yandsearch?text=%3D