2013-06-06 2 views
0

Я использую следующую функцию, которая позволяет мне легко захватывать запросы с URL-адресов.функция querystring сбой

var urlParams = {}; 
(function() { 
var e, 
    a = /\+/g, // Regex for replacing addition symbol with a space 
    r = /([^&=]+)=?([^&]*)/g, 
    d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, 
    q = window.location.search.substring(1); 

while (e = r.exec(q)) 
    urlParams[d(e[1])] = d(e[2]); 
})(); 

Тогда я просто называю

var k=urlParams["url"]; 
var ttl=urlParams["title"]; 

Это работает замечательно, для следующих строк запроса, нарушающего функции, кроме:

?title=Jpreay%20will%20do%20a%20press%20release%20or%20news%20announcement%20commercial%20for%20$5,%20only%20on%20fiverr.com&cnt=For%20only%205$,%20jpreay%20will%20do%20a%20press%20release%20or%20news%20announcement%20commercial.%20Top%20Rated%20Seller%20100%%20Rating%20for%20Over%2010%20Months%20Now%20In%20this%20gig%20I%20am%20providing%20a%20news%20release%20or%20some%20other%20type%20of%20event%20|%20On%20Fiverr.com&url=http%3A%2F%2Ffiverr.com%2Fjpreay%2Ffilm-a-press-release-or-news-announcement-of-your-product-or-services

Я получаю следующее сообщение об ошибке:

URIError: malformed URI sequence 
[Break On This Error] 
var k=urlParams["url"]; 

Может ли кто-нибудь помочь мне разобраться, в чем проблема?

Заранее благодарен!

ответ

0

Используйте unescape и включите? в соответствующем регулярном выражении вместо выполнения подстроки. Я также переместил бы пространство вместо внешнего, на случай, если функция не любит пробелы.

Итак, мы в конечном итоге с:

var urlParams = {}; 
(function() { 
var e, 
    a = /\+/g, // Regex for replacing addition symbol with a space 
    r = /([^&?=]+)=?([^&?]*)/g, 
    d = function (s) { return unescape(s).replace(a, " "); }, 
    q = window.location.search; 

while (e = r.exec(q)) 
    urlParams[d(e[1])] = d(e[2]); 
})(); 

Когда я проверить (используя строку вместо window.location.search),

var k=urlParams["url"]; 
var ttl=urlParams["title"]; 
console.log('k='+k); 
console.log('ttl='+ttl); 

я получаю это:

k=http://fiverr.com/jpreay/film-a-press-release-or-news-announcement-of-your-product-or-services 
ttl=Jpreay will do a press release or news announcement commercial for $5, only on fiverr.com 
Смежные вопросы