Рассмотрим следующий код:
hashString = window.location.hash.substring(1);
alert('Hash String = '+hashString);
при запуске со следующими хэш:
# Car = Town% 20% 26% 20Country
Результат в Chrome и Safari будет:
Car = Town% 20% 26% 20Country
Но в Firefox (Mac и PC) будет:
Car = Town & Country
, потому что я использую тот же код, чтобы разбираться в запрос и хеш-параметрам:
function parseParams(paramString) {
var params = {};
var e,
a = /\+/g, // Regex for replacing addition symbol with a space
r = /([^&;=]+)=?([^&;]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = paramString;
while (e = r.exec(q))
params[d(e[1])] = d(e[2]);
return params;
}
Идиосинкразия Firefox здесь ломает: автомобиль PARAM «Город», нет страны.
Есть ли безопасный способ разбираться на парами на браузерах, или исправить, как Firefox их читает?
Примечание: Эта проблема ограничивается анализами HAHEFOX. При запусках того же теста с строками запросов:
queryString = window.location.search.substring(1);
alert('Query String = '+queryString);
Все браузеры будут показывать:
Car = Town% 20% 26% 20Country