Encode everything except a whitelist of special chars

see #2406
This commit is contained in:
Martin Raifer
2014-10-21 22:37:47 +02:00
parent 4d2d24bbaa
commit 041e0e5b66

View File

@@ -41,7 +41,11 @@ iD.util.stringQs = function(str) {
};
iD.util.qsString = function(obj, noencode) {
function softEncode(s) { return s.replace('&', '%26').replace('=', '%3D'); }
function softEncode(s) {
// encode everything except special characters used in certain hash parameters:
// "/" in map states, ":", ",", {" and "}" in background
return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
}
return Object.keys(obj).sort().map(function(key) {
return encodeURIComponent(key) + '=' + (
noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));