ParseQueryString в http://safalra.com/web-design/javascript/parsing-query-strings/ содержит некоторые ошибки:
- Несколько
+
не заменяются пробелом.
- Множественные неэкранированные знаки равенства приводят к потере содержимого.
- Пустой ввод приводит к объекту с ключом "".
- Несколько пустых ключей не удаляются
В приведенной ниже функции указанные выше ошибки были удалены и протестированы в Firefox 3, Internet Explorer 7, Opera 9 и Google Chrome 1.
function parseQueryString(input){
var out={}, decode=decodeURIComponent, s=input||location.search||"",
kv=("?"===s.charAt(0)?s.slice(1):s).replace(/\+/g," ").split(/[&;]/g),
idx=-1,key,value;
while(++idx<kv.length){
if (kv[idx]==="") continue;
value=kv[idx].split("=");
key=decode(value.shift());
(out[key]||(out[key]=[])).push(decode(value.join("=")));
}
return out;
}
Функция выше (и оригинал) ожидает только часть запроса URL : от знака вопроса до конца строки или до первого #. Если аргумент не указан, он автоматически извлечет часть запроса из URL текущего местоположения браузера.
Результатом является объект с ключами из строки запроса, а значение всех ключей является массивом всех значений.
var data = parseQueryString("?a=test1&a=test2&b=test3");
//Result of data:
{
a:["test1","test2"],
b:["test3"]
}
Некоторые примеры:
// Alert all values of the a key:
if (data.a && data.a.length) {
for (var i=0;i<data.a.length;++i)
alert(data.a[i]);
}
// Get the first value of a-key:
var value_a = data.a && data.a[0];
// Get the first value of a-key or default:
var value_a = data.a && data.a[0] || "default";