mirror of
https://github.com/golang/go
synced 2024-11-13 18:30:26 -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:
parent
2a6bb2c63e
commit
a967f57d19
@ -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;
|
||||
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user