特殊字符关键字筛选
工作中涉及到
like
查询,正常直接where ("name like ? ,"%"+keyword+"%")
就能解决基本问题
但是,今天测试反馈说 %
,_
去筛选没效果。经过测试,发现这些特殊字符要在MySQL语句进行转换。
go strings
包提供了 Replace
函数,但是这样要每个特殊字符都要去替换一下,多个就要多次调用,感觉不合适。
然后发现strings
包提供了一个NewReplacer
函数,可以自定义替换规则。
func NewReplacer
func NewReplacer(oldnew …string) *Replacer
使用提供的多组old、new字符串对创建并返回一个*Replacer。替换是依次进行的,匹配时不会重叠。
Exampler := strings.NewReplacer("<", "<", ">", ">") fmt.Println(r.Replace("This is <b>HTML</b>!"))
Output:
This is <b>HTML</b>!
数据库中需要转移的特殊字符:\
、_
、'
、%
;
自定义替换函数,然后去处理:
//定义特殊字符的替换规则
special := strings.NewReplacer(`\`, `\\`, `_`, `\_`, `%`, `\%`, `'`, `\'`)
keyword = special.Replace(keyword)
还有一个坑就是,前端传递%
会进行转义,变成%25
传参,所以模拟的时候,postman 也需要转移传递。
本作品采用《CC 协议》,转载必须注明作者和本文链接