工作中涉及到
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 協議》,轉載必須註明作者和本文連結