首页 > 代码库 > URL escape and unescape

URL escape and unescape

Recently, I study the package  net/url of Golang.

I was puzzled about the escape and unescape of url string.

then I find a clear and accurate answer at: http://www.sislands.com/coin70/week6/encoder.htm

 

the code in golang:

 1 // unescape unescapes a string; the mode specifies 2 // which section of the URL string is being unescaped. 3 func unescape(s string, mode encoding) (string, error) { 4     // Count %, check that they‘re well-formed. 5     n := 0 6     hasPlus := false 7     for i := 0; i < len(s); { 8         switch s[i] { 9         case %:10             n++11             if i+2 >= len(s) || !ishex(s[i+1]) || !ishex(s[i+2]) {12                 s = s[i:]13                 if len(s) > 3 {14                     s = s[0:3]15                 }16                 return "", EscapeError(s)17             }18             i += 319         case +:20             hasPlus = mode == encodeQueryComponent21             i++22         default:23             i++24         }25     }26 27     if n == 0 && !hasPlus {28         return s, nil29     }30 31     t := make([]byte, len(s)-2*n)32     j := 033     for i := 0; i < len(s); {34         switch s[i] {35         case %:36             t[j] = unhex(s[i+1])<<4 | unhex(s[i+2])37             j++38             i += 339         case +:40             if mode == encodeQueryComponent {41                 t[j] =  42             } else {43                 t[j] = +44             }45             j++46             i++47         default:48             t[j] = s[i]49             j++50             i++51         }52     }53     return string(t), nil54 }

 

 

After a period of home work,  Now I am confident about implimenting the project: gocrawel by myself.

URL escape and unescape