最近做得都是微信公眾號的項目,第一次做,所以有些問題都記錄一下
最初在保存用戶微信昵稱的時候都是直接保存的,后來朋友某些不規則昵稱的時候才發現問題
第一個辦法是:
用的是tp5.1,所以在表model里面設置了

1 public function setNicknameAttr($value){ 2 return base64_encode($value); 3 } 4 public function getNicknameAttr($value){ 5 return base64_decode($value); 6 }
這樣在保存和獲取的時候都能直接轉換了
有幾個問題,一個是如果后台要按照昵稱來搜索,會出現問題
mysql有一個from_base64()函數,來把php通過base64_encode()加密的字段解密,不過沒找到tp5.1中有配合mysql的from_base64()的功能,只能用原生了

1 SELECT 2 * 3 FROM 4 table 5 WHERE 6 ( 7 from_base64 (nickname) LIKE "%find%" 8 AND `subscribe` = 1 9 ) 10 ORDER BY 11 `create_time` ASC
第二個問題其實跟第一個類似,就是如果要用到加密過的字段來進行某些判斷或搜索,還是要通過解密的
第二個辦法是:
網上說
1.把數據庫中昵稱的字段改為utf8mb4
2.把tp5.1的數據庫配置文件中的數據庫默認編碼(charset),有utf-8改為 utf8mb4。
第二個辦法我沒有試過,只是記錄一下