Jquery查询参数解析- "="在查询字符串中,将查询字符串分割

jquery query parameter parsing - "=" in query string breaks query string up

本文关键字:查询 字符串 quot 分割 参数 Jquery      更新时间:2023-09-26

我正在尝试使用这个jquery插件和这个示例查询字符串从查询字符串解析参数:

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-

这是正常行为吗?等号在这个查询字符串中有什么特别的作用吗?如果不是,我如何解析这个查询字符串以获得整个参数?

使用gup代替。我看到它在很多地方使用,效果很好。这很简单。请注意,我在代码中做了一个小的改变来插入url。下面的代码是你应该实际使用的。

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];
}

插件本身并不是为了容纳这样的字符串而编写的。罪魁祸首是下面这段代码…

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);

是的。"="用作部分查询的分隔符,因此您应该转义它。Yandex搜索引擎是这样做的:http://yandex.ru/yandsearch?text=%3D