2017-02-19 7 views
0

У меня есть следующий 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%98konomi и param2 = Penger

При выполнении запроса это против моего набора данных, я не могу получить матч результатов названных Økonomi с капиталом Ø. Если я изменю данные до økonomi, я получаю совпадение.

Точно ли кодированное значение URI %C3%98 не возвращается Ø? Как я могу убедиться, что это будет?

+0

Что 'console.log (URL)' 'шоу в getQueryStringValue'? 'decodeURIComponent ('% C3% 98')' определенно должен быть '' Ø''. – Ryan

+0

Это показывает '% C3% 98' –

+0

Весь ваш URL-адрес'% C3% 98'? Интересно. Как вы вызываете 'getQueryStringValue' и проверяете результат? – Ryan

ответ

0

Вы должны сделать это:

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

Браузеры кодировать URL, используя encodeUriComponent функцию, и вы должны расшифровать его.

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