zoukankan      html  css  js  c++  java
  • 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 += 3
    19         case '+':
    20             hasPlus = mode == encodeQueryComponent
    21             i++
    22         default:
    23             i++
    24         }
    25     }
    26 
    27     if n == 0 && !hasPlus {
    28         return s, nil
    29     }
    30 
    31     t := make([]byte, len(s)-2*n)
    32     j := 0
    33     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 += 3
    39         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), nil
    54 }

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

  • 相关阅读:
    BZOJ1042: [HAOI2008]硬币购物
    BZOJ1089: [SCOI2003]严格n元树
    BZOJ1060: [ZJOI2007]时态同步
    BZOJ2697: 特技飞行
    BZOJ2464: 中山市选[2009]小明的游戏
    BZOJ1430: 小猴打架
    BZOJ3675: [Apio2014]序列分割
    BZOJ2453: 维护队列
    BZOJ2120: 数颜色
    BZOJ4547: Hdu5171 小奇的集合
  • 原文地址:https://www.cnblogs.com/harrysun/p/3933843.html
Copyright © 2011-2022 走看看