Encoding and Decoding URL strings
by Manohar Kamath
August 31, 1999
When you pass something as an URL's querystring, the
string is encoded and all special characters like space, %, etc. are converted
into their %xx values. Here, xx denotes a number and the %xx represents any
character that can not be passed within the URL in their original form. The
characters include spaces, all punctuation symbols, accented characters (like ?
? etc.) and non-ASCII characters(Source: MSDN library).
The URL has to be in one piece and symbols spaces can
break it. Also, symbols like &, = and + are used within an URL to separate
the querystring's key. So, if you want to pass a key-value pair something like
Message=Hello World, the URL (when not encoded) may look like:
Listing 1
mypage.asp?mesage=Hello
World!
and the space between "Hello" and "World" breaks the URL.
So when you do something like
Listing
2
<%=Request.QueryString("message") %>
within mypage.asp, you will get only "Hello"
The escape() function in JavaScript parses a string and
converts and special characters into their %xx equivalents. This function is
very useful when you are trying to "build" a URL from within your ASP page. So
if you want to build a correct version of the URL shown in listing 1, you would
do something like in listing 3 (which is in JavaScript):
Listing 3
lsURL = "mypage.asp?message="
+ escape("Hello World!")
Alternatively, you can use the URLEncode function in the
Server object to get the same results. Listing 4 is in VBScript.
Listing 4
lsURL = "mypage.asp?message="
& Server.URLEncode("Hello World!")
The result is mypage.asp?message=Hello%20World%21
Decoding the querystring is easy - just call unescape()
function in JavaScript. VBScript, on the other hand, does not have any in-built
function to decode URLStrings.
Note: You will need
to call unescape() within the same page as you called escape() to decode the
strings. Otherwise, a simple Request.QueryString("message") will automatically
decode the URL for you.
I wrote this tiny function so you can include it on any
ASP page with any scripting language and use it. Just include it in any ASP page
and call the function URLEncode() with a string argument.
Listing 5
<script
language=JavaScript RUNAT=SERVER>
function URLDecode(psEncodeString)
{
return
unescape(psEncodeString);
}
</script>
An example of using this is in Listing 6
Listing
6
<%=URLDecode("Hello%20World%21") %>
the result being - Hello World!
Note:
Some people have asked me how
to decode those "+"s, which are nothing but encoded spaces in the URL. Although
Request.QueryString("your_key") should remove the +s, here is the code that will
replace +s with spaces. This is nothing but a modified Listing 5.
Listing 6
<script
language=JavaScript RUNAT=SERVER>
function URLDecode(psEncodeString)
{
var lsRegExp = /\+/g;
return
unescape(String(psEncodeString).replace(lsRegExp, " "));
}
</script>