1
0
mirror of https://github.com/golang/go synced 2024-11-21 23:24:41 -07:00

http.URLEscape: escape all bytes required by RFC 2396

Fixes #125.

R=r
https://golang.org/cl/154143
This commit is contained in:
Russ Cox 2009-11-15 12:56:50 -08:00
parent 2a6bb2c63e
commit a967f57d19
2 changed files with 10 additions and 8 deletions

View File

@ -52,14 +52,16 @@ func (e URLEscapeError) String() string {
return "invalid URL escape " + strconv.Quote(string(e))
}
// Return true if the specified character should be escaped when appearing in a
// URL string.
//
// TODO: for now, this is a hack; it only flags a few common characters that have
// special meaning in URLs. That will get the job done in the common cases.
// Return true if the specified character should be escaped when
// appearing in a URL string, according to RFC 2396.
func shouldEscape(c byte) bool {
if c <= ' ' || c >= 0x7F {
return true
}
switch c {
case ' ', '?', '&', '=', '#', '+', '%':
case '<', '>', '#', '%', '"', // RFC 2396 delims
'{', '}', '|', '\\', '^', '[', ']', '`', // RFC2396 unwise
'?', '&', '=', '+': // RFC 2396 reserved in path
return true
}
return false;

View File

@ -335,8 +335,8 @@ var escapeTests = []URLEscapeTest{
nil,
},
URLEscapeTest{
" ?&=#+%!",
"+%3f%26%3d%23%2b%25!",
" ?&=#+%!<>#\"{}|\\^[]`☺\t",
"+%3f%26%3d%23%2b%25!%3c%3e%23%22%7b%7d%7c%5c%5e%5b%5d%60%e2%98%ba%09",
nil,
},
}