rmw rmw - 1 month ago 8
Javascript Question

How to encode a query string so that it is the value of another query string in javascript?

I have a javascript function which passes as a query string value another query string.

In other words, I want the query string to be:

http://www.somesite.com/?somequery=%3fkey%3dvalue1%2520%26%2520key2%3value3


However, if I redirect like this:

var url = 'http://www.somesite.com/?somequery=';
url += escape('?key=value1&key2=value2');
window.location = url;


it ends up as
http://www.somesite.com?somequery=?key1=value1&key2=value2
in firefox and IE7 which means that I can't parse the query string correctly.

I also tried using encodeURIComponent which didn't work either.

Is there another function or a hack to force the redirect to keep the
somequery
value escaped??

Answer

encodeURIComponent will work. (You may or may not want the leading ‘?’, depending on what the script is expecting.)

var c= 'd e'
var query= '?a=b&c='+encodeURIComponent(c);
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query);
window.location= uri;

Takes me to:

http://www.example.com/script?query=%3Fa%3Db%26c%3Dd%2520e

When you hover over that it may appear once-decoded in the browser's status bar, but you will end up in the right place.

escape/unescape() is the wrong thing for encoding query parameters, it gets Unicode characters and pluses wrong. There is almost never a case where escape() is what you really need.

Comments