我有以下网址:
my.site/?param1=Økonomi¶m2=Penger
我正在使用此函数来获取参数值:
function getQueryStringValue(url, key) {
var params = {};
var url_params = url.split("?", 2);
if (url_params.length > 1) {
var param_list = url_params[1].split("&");
param_list.map(function (param_str) {
var kv = param_str.split("=", 2);
params[kv[0]] = kv[1];
});
}
return (key in params)? decodeURIComponent(params[key]) : ''
}
记录结果时,这些是返回的值:
param1 = %C3%98konomi
和param2 = Penger
在针对我的数据集查询时,我无法将名为Økonomi
的结果与资本Ø
匹配。如果我将数据更改为økonomi
,我会得到一个匹配。
编码的URI值%C3%98
也不会返回Ø
吗?我怎么能确定它会?
答案 0 :(得分:0)
你必须这样做:
const getQueryStringValue = (url, key) =>
((decodeURIComponent(url).split('?')[1] || '').match(new RegExp(`${key}=([^&]*)`)) || [,null])[1]
const url = encodeURIComponent('my.site/?param1=Økonomi¶m2=Penger')
console.log(getQueryStringValue(url, 'param1'))
console.log(getQueryStringValue(url, 'param2'))
console.log(getQueryStringValue('my.site/', 'param2'))
console.log(getQueryStringValue('my.site/?param1=Økonomi¶m2=Penger', 'param3'))
浏览器使用encodeUriComponent
函数对网址进行编码,您必须对其进行解码。
console.log(decodeURIComponent('%C3%98'))