我有以下网址参数
样本值实际值包含如此多的参数
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参数在发送到节点服务器并解码时被编码(clientside)。
2.NREUM未编码,因此getParameterValue方法最多分割为1376355292394.
有助于改善getParameterValue
功能。
准备解释更多。
答案 0 :(得分: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);
另外,您是否知道Node.js有querystring.parse()
?
// with: var qs = require('querystring');
var query = qs.parse(data);
console.log(query.cookies); // ...