0

我有以下 url 参数

样本值实际值包含这么多参数

var data = "browserName=MSIE&cookies=Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394&r=220970&p=2080092;cs_uuid=209712058942163; cs_si=209712058942163.1&javascriptEnabled=true";

以下函数用于获取特定参数

//获取特定参数的通用函数

getParameterValue : function(data, parameter) {

    var value = null;
    if (data.length > 0) {
        var paramArray = data.split("&");

        for ( var i = 0; len = paramArray.length, i < len; i++) {
            var param = paramArray[i];
            var splitter = parameter + "=";
            if (param.indexOf(splitter) > -1) {
                value = param.substring(param.indexOf(splitter)
                        + splitter.length, param.length);
                break;
            }

        }
    }
    return value;

}

例子

 getParameterValue(data, "browserName");

 output is MSIE //correct

问题是

getParameterValue(data, "cookies");

Output is

Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394

但所需的输出是

Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394&r=220970&p=2080092;cs_uuid=209712058942163; cs_si=209712058942163.1

要知道:

1.URL参数在发送到节点服务器并解码时被编码(客户端)。

2.NREUM未编码,因此getParameterValue方法拆分为1376355292394。

任何有助于改善getParameterValue功能。

准备解释更多。

4

1 回答 1

7

好吧,getParameterValue()似乎解析data正确,但data没有正确编码以区分分隔符和值字符。

的值cookies,例如:

cookies=Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394&r=220970&p=2080092;cs_uuid=209712058942163; cs_si=209712058942163.1

本身应该被编码(在用于 cookie 值本身的任何编码之上)。

cookies=Rgn%3D%257CCode%253DMUMBAI%257Ctext%253DMumbai%257C%3B%20NREUM%3Ds%3D1376355292394%26r%3D220970%26p%3D2080092%3Bcs_uuid%3D209712058942163%3B%20cs_si%3D209712058942163.1

而且,由于模棱两可,现在尝试“修复”这个服务器端已经很晚了。它需要在客户端进行编码,这可以使用encodeURIComponent().

'cookies=' + encodeURIComponent(cookies)

如果你碰巧在使用 jQuery,你可以使用它jQuery.param()来帮助确保正确的编码。

var data = {
    browserName: 'MSIE',
    cookies: document.cookie,
    javascriptEnabled: true
};

data = $.param(data); // browserName=MSIE&cookies=Rgn%3D%257CCode...

或者,您可以使用轻量级的游戏,至少对于“传统”格式。

function urlParam(params) {
    var res = [];

    for (var name in params) {
        res.push(encodeURIComponent(name) + '=' + encodeURIComponent(params[name]));
    }

    return res.join('&');
}

var data = urlParam(data);

示例:http: //jsfiddle.net/GQpTB/


另外,你知道 Node.js 有querystring.parse()吗?

// with: var qs = require('querystring');
var query = qs.parse(data);

console.log(query.cookies); // ...
于 2013-08-13T07:54:02.927 回答