# JS获取和修改url参数
# 获取url参数
/**
* 获取url里的参数
* @param arg 参数名
* @returns
*/
function getURLString(arg) {
var reg = new RegExp("(^|&)" + arg + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return unescape(r[2]);
return null;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
export const getUrlParamBySearch = ({
name,
path = '',
decode = true,
} = {}) => {
const _path = path || location?.href || '';
// 分组捕获 两个子组
const reg = /([^?&=]+)=([^&]+)/g;
let params = {};
_path.replace(reg, (_, k, v) => {
// 为什么要解码两次?因为 uniapp 跳转时会对特殊字符进行一次编码(哪怕是你 encodeURIComponent 后产生的特殊字符)
params[k] = decode ? decodeURIComponent(decodeURIComponent(v)) : v;
});
return name ? Reflect.get(params, name) : params;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改url参数
/**
* url地址修改
* @param url 待修改url
* @param arg 修改的参数名
* @param arg_val 修改的具体值
* @returns {String}
*/
function changeURLArg(url, arg, arg_val) {
var pattern = arg + '=([^&]*)';
var replaceText = arg + '=' + arg_val;
if (url.match(pattern)) {
var tmp = '/(' + arg + '=)([^&]*)/gi';
tmp = url.replace(eval(tmp), replaceText);
return tmp;
} else {
if (url.match('[\?]')) {
return url + '&' + replaceText;
} else {
return url + '?' + replaceText;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 不刷新页面修改url参数
https://www.cnblogs.com/wuting/p/8946927.html (opens new window)
# URL 的编码和解码
比如,UTF-8 的操作系统上,http://www.example.com/q=春节
这个 URL 之中,汉字“春节”不是 URL 的合法字符,所以被浏览器自动转成http://www.example.com/q=%E6%98%A5%E8%8A%82
。其中,“春”转成了%E6%98%A5
,“节”转成了%E8%8A%82
。这是因为“春”和“节”的 UTF-8 编码分别是E6 98 A5
和E8 8A 82
,将每个字节前面加上百分号,就构成了 URL 编码。
JavaScript 提供四个 URL 的编码/解码方法。
encodeURI()
encodeURIComponent()
decodeURI()
decodeURIComponent()