【问题标题】:Special characters in URL - need to get the capital ØURL 中的特殊字符 - 需要获取大写 Ø
【发布时间】:2017-02-19 22:42:36
【问题描述】:

我有以下网址:

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 不会返回 Ø 吗?我怎样才能确保它会?

【问题讨论】:

  • console.log(url)getQueryStringValue 中显示什么? decodeURIComponent('%C3%98') 绝对应该是 'Ø'
  • 您的整个网址是%C3%98?有趣的。你如何打电话给getQueryStringValue 并检查结果?
  • 整个 URL 日志:param1=%C3%98konomi&param2=Penger 我在 getJSON 函数中调用函数:var firma = getQueryStringValue(url, "param1");
  • 而你 console.log(firma); 并且结果仍然包含 %C3%98?
  • console.log(firma) 给出Økonomi

标签: javascript regex utf-8


【解决方案1】:

你必须这样做:

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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2011-06-03
    • 2014-12-09
    • 1970-01-01
    • 2011-10-29
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多