12
votes

http://www.w3schools.com/tags/ref_urlencode.asp

Since URLs often contain characters outside the ASCII set, the URL has to be converted into a valid ASCII format.

But both space, /, % are part of the ASCII character set, so why encode them in the first place? What characters should be encoded?

4
UTF-8 characters for example, or any character from a different character set. ASCII is just about the smallest range of characters.Halcyon
I'm not shure, but I think every character should be encoded which could have a different meaning (for example & and space). Dont use w3schools.com, it has nothing to do with w3c and is quite often wrong.user1150525

4 Answers

7
votes

As noted, spaces are not valid in URLs. Most browsers orlencode them automatically. However...

The page you linked to has an example using the word "Günter" in the "Try me" section. If the word "Günter" were sent as a querystring parameter, it wouldn't work. as the "ü" is not in the standard ASCII character set.

It's meant to be used when there are potentially non-ASCII characters. An example might be when using data from a database to create a hyperlink. Suppose the code creates a link to a user profile page. Unencoded, mine would be:

<a href="profile/?username=David Stratton">Your profile</a>

while Günter's would be

<a href="profile/?username=Günter">Your profile</a>

Mine, most browsers could handle. Günter's, probably not.

Encoded, these would become

<a href="profile/?username=David%20Stratton">Your profile</a>

and

<a href="profile/?username=G%FCnter">Your profile</a>

which are valid URLs.

(Please forgive the fact that most well-designed systems wouldn't pass a username in a parameter like that. This was just a sample to clarify the concept.)

8
votes

The characters in a URL should be encoded because some characters have a special meaning according to the URL specification, some characters are not allowed and some characters are not representable in all character sets.

See this intro for a little more guidance.

Regarding the examples of characters that you give '/' is reserved for use as a component separator in URLs and '%' is used as an escape character.

1
votes

Here you go:

When are you supposed to use escape instead of encodeURI / encodeURIComponent?

This is the best explanation I found and was helpful to me.

1
votes

Certain characters, such as spaces, need to be escaped to ensure valid urls. Once place where this is sure to come up a lot is when generating GET parameters.