У меня возникла странная проблема, анализирующая параметр строки с кодировкой URL-кода в JavaScript.JavaScript parsing urlencoded query parameter
function getUrlVars() {
var vars = [], hash;
alert(window.location.href);
var hashes = window.location.href.slice(decodeURIComponent(window.location.href).indexOf('?') + 1).split('&');
alert(decodeURIComponent(window.location.href));
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
URL: http://domain/approveFile/ApproveFile.aspx?id=DZj9aEoyZ2I%3d
Значение "DZj9aEoyZ2I="
является URL-кодированное значение base64, но она не будет правильно разобрать; он игнорирует "%3d"
. Пожалуйста, предложите решение?
Во-первых, используйте 'window.location.search.slice (1)' вместо того, чтобы пытаться разобрать эту часть URL самостоятельно. Во-вторых, вы декодируете детали перед расщеплением на '=', что означает, что '% 3d' обрабатывается как разделитель ключа-значения, заканчивающийся в' hash [2] 'внутри цикла. Наконец, я уверен, что вместо разделения на '' & "' вы должны делиться на '/ & (?! amp;) /' ie '&' s, которые не являются '&' –
(закончились времени для редактирования) На самом деле последний пункт о '&' неверен, он закодирован как '% 26', а не' &foo; ', которые являются объектами _HTML_, извините –
@ PaulS.A правильный URL не должен иметь' & ' закодирован. –