Sometimes the spaces get url encoded to + sign, some other times to %20, what is the difference and why and why not this happens?
+3
A:
+
means a space only in application/x-www-form-encoded
content, such as the query part of a URL:
http://www.example.com/path/foo+bar/path?query+name=query+value
In this URL, the parameter name is query name
with a space and the value is query value
with a space, but the folder name in the path is literally foo+bar
, not foo bar
.
%20
is a valid way to encode a space in either of these contexts. So if you need to URL-encode a string for inclusion in part of a URL, it is always safe to replace spaces with %20
and pluses with %2B
. This is what eg. encodeURIComponent()
does in JavaScript. Unfortunately it's not what urlencode
does in PHP (rawurlencode
is safer).
bobince
2010-04-20 21:02:26
really I am confused, My Question is, when the browser do the first form, and when do the second fomr?
Mohammed
2010-04-20 21:11:19
The browser will create a `query+name=query+value` parameter from a form with `<input name="query name" value="query value">`. It will not create `query%20name` from a form, but it's totally safe to use that instead, eg. if you're putting a form submission together youself for an `XMLHttpRequest`. If you have a URL with a space in it, like `<a href="http://www.example.com/foo bar/">`, then the browser will encode that to `%20` for you to fix your mistake, but that's probably best not relied on.
bobince
2010-04-20 21:22:46