特殊字符关键字筛选

工作中涉及到 like 查询,正常直接 where ("name like ? ,"%"+keyword+"%")就能解决基本问题

但是,今天测试反馈说 %,_去筛选没效果。经过测试,发现这些特殊字符要在MySQL语句进行转换。
go strings包提供了 Replace函数,但是这样要每个特殊字符都要去替换一下,多个就要多次调用,感觉不合适。

然后发现strings包提供了一个NewReplacer函数,可以自定义替换规则。

func NewReplacer

func NewReplacer(oldnew …string) *Replacer
使用提供的多组old、new字符串对创建并返回一个*Replacer。替换是依次进行的,匹配时不会重叠。
Example

r := strings.NewReplacer("<", "&lt;", ">", "&gt;")
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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!