0

I have a function in js which parse a url and creates a map of (paramName,value)

The code is like:

var search = location.search.substring(1);
var data = {}
if(search!="")
{
    var urlParams = JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}');
    for (var key in urlParams) {
        data[key] = urlParams[key];
    }
}

Now this is working fine for a plain url like www.google.com?param1=2&param4=hello

But it is not working for a encrypted url like www.google.com?param1=XDTY-300Hbc=&param4=hello

as here the param1=XDTY-300Hbc= contains a = in the end. Please help

jcubic
  • 61,973
  • 54
  • 229
  • 402
Arpan Das
  • 1,015
  • 3
  • 24
  • 57
  • Just a side not you don't need to iterate over urlParams you can just use `data = JSON.parse(...` – jcubic May 13 '16 at 14:41

1 Answers1

1

Try this:

var url = 'www.google.com?param1=XDTY-300Hbc=&param4=hello';
var query = url.substring(1);
var data = {};
query.split('&').filter(Boolean).forEach(function(pair) {
  pair = pair.split('=');
  data[decodeURIComponent(pair[0])] = decodeURIComponent(pair.slice(1).join('=')).replace(/\+/g, ' ');
});
document.body.innerHTML = JSON.stringify(data);
jcubic
  • 61,973
  • 54
  • 229
  • 402