特殊字元關鍵字篩選

wacho 發表於 2021-06-10

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