URL 中的特殊字符 - 需要获取大写字母 Ø



我有以下URL:

my.site/?param1=Økonomi&param2=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%98konomiparam2 = Penger

在对我的数据集进行查询时,我无法与资本ØØkonomi结果匹配。如果将数据更改为økonomi,我会得到匹配。

那么编码的URI值%C3%98不返回Ø?我如何确保它将?

您必须这样做:

const getQueryStringValue = (url, key) => 
    ((decodeURIComponent(url).split('?')[1] || '').match(new RegExp(`${key}=([^&]*)`)) || [,null])[1]
const url = encodeURIComponent('my.site/?param1=Økonomi&param2=Penger')
console.log(getQueryStringValue(url, 'param1'))
console.log(getQueryStringValue(url, 'param2'))
console.log(getQueryStringValue('my.site/', 'param2'))
console.log(getQueryStringValue('my.site/?param1=Økonomi&param2=Penger', 'param3'))

浏览器使用encodeUriComponent函数编码URL,您必须对其进行解码。

console.log(decodeURIComponent('%C3%98'))

最新更新