Jon*_*lls 3 javascript url jquery url-parameters
假设www.mydomain.com?param1=example
作为一个例子.
存储作为键值对列表的第二个参数的最佳方法是什么?在我使用的那一刻¶m2=key|value,key|value
.我使用垂直线将键与值分开,并使用逗号配对,等于之后的所有内容都使用encodeURIComponent()
.这很好用.
然而,用户可以控制价值......而作为明智的人类,我们都知道用户可能做的第一件事就是将垂直条或逗号作为破坏我的参数解析器的值之一.有一个更好的方法吗?我见过PHP用户正在讨论在URL中存储相关数组,但我正在寻找一个纯粹的JavaScript解决方案.
PHP(和其他服务器端语言)支持在查询字符串中传递数组.
www.mydomain.com?param1=example¶m2[key1]=value1¶m2[key2]=value2
Run Code Online (Sandbox Code Playgroud)
PHP将解析GET字符串:
array(2) {
["param1"]=>
string(7) "example"
["param2"]=>
array(2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}
}
Run Code Online (Sandbox Code Playgroud)
如果你没有传递密钥,它将成为一个数字数组:
www.mydomain.com?param1=example¶m2[]=value1¶m2[]=value2
Run Code Online (Sandbox Code Playgroud)
将被解析为:
array(2) {
["param1"]=>
string(7) "example"
["param2"]=>
array(2) {
[0]=>
string(6) "value1"
[1]=>
string(6) "value2"
}
}
Run Code Online (Sandbox Code Playgroud)
更新:您还可以在JavaScript中解析查询字符串.
这是我制作的一个简单的jQuery插件:
$.parseQuery = function(str) {
var ret = {};
$.each(str.split("&"), function() {
var data = this.split('='),
name = decodeURIComponent(data.shift()),
val = decodeURIComponent(data.join("=")).replace('+', ' '),
nameVal = name.match(/(.*)\[(.*)\]/);
if (nameVal === null) {
ret[name] = val;
}
else {
name = nameVal[1];
nameVal = nameVal[2];
if (!ret[name]) {
ret[name] = nameVal ? {} : [];
}
if ($.isPlainObject(ret[name])) {
ret[name][nameVal] = val;
}
else if($.isArray(ret[name])){
ret[name].push(val);
}
}
});
return ret;
};
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:$.parseQuery('param1=example¶m2[]=value1¶m2[]=value2');
.
归档时间: |
|
查看次数: |
6266 次 |
最近记录: |