]*?>.*?", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re">
工作中多次遇到Python版本的签名算法,需要用Go版本再实现一遍,这就需要牵扯到Python 2.7中的urllib中的quote,quote_plus和Go中net/url包中的url.QueryEscape的关系。
下面直接给出它们的关系:
urllib.quote_plus(str)等同于url.QueryEscape(str), urllib.quote_plus(str)和urllib.quote(str)的关系如下
rllib.quote(string[, safe])
将string中的特殊字符做转义,但是字母,数字和'_.-'不会转义,还有safe默认的'/'也不会转义, 如果safe为’‘,则'/'也会转义
比如:quote('/~connolly/') yields '/%7econnolly/'
urllib.quote_plus(string[, safe])
类似quote,但是空格被替换为+号,本身的+和/号都会转义
Python 对URL的编解码操作提供了urllib模块
urlencode 是针对字典的操作,也可以单独对一个字符串值进行编码,基于是否把空格替换为加号+的不同行为,是把空格转换为%20,还是加号+,分别有quote和quote_plus操作。
下面是我的实操记录,这是在python 2.7上的记录:
下面是Go的实操记录:
下面是对应的源码
//description: 这里验证了Go中的url.QueryEscape(str)和Python 2中的urllib.quote_plus(str)效果是一样的
//note: python 2直接在命令行中进行验证即可
//date: 2020-07-06package mainimport ("fmt""net/url"
)func main() {str := "老王a /+ *"fmt.Println(url.QueryEscape(str))
}
从python和Go的实操对比,可以看出,urllib.quote_plus()和url.QueryEscape() 效果是相同的。
下面是转义对应符号:
urllib.quote(str,' ')的处理结果:
空格=》%20,*=》%2A,/=》%2F,+=》%2B
urllib.quote_plus(str)的处理结果,这里第二个参数是" "或可省略:
空格=》+, *=》%2A,/=》%2F,+=》%2B
这两个函数对空格的处理是不同的。
C语言中操作字符串用C运行时函数:strtok, strcmp, strcpy等等,直接操作内存。在c++引入的字符串操作类std:string ,string类中必有一个私有成员,其是一个char*,用户记录从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存。因为是从堆上分配内存,所以string类在维护这块内存上是格外小心...
思路
大体思路:数据结构选用栈,读到左括号时入栈,读到右括号时判断是否匹配,匹配则左括号出栈,非括号字符则继续往下读
代码
#include
方法1: Controller
str = Regex.Replace(str, @"", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re...