本文主要介紹了ucenter中詞語過濾原理,結合執行個體形式分析了ucenter中詞語的相關sql欄位定義與過濾功能的實現方法,涉及php正則替換及字串與數組的相關操作技巧,需要的朋友可以參考下。希望對大家有所協助。
本文分析了ucenter中詞語過濾原理。分享給大家供大家參考,具體如下:
過濾詞語表:
id |
admin |
find |
replacement |
findpattern |
1 |
UCenterAdminist |
訪問 |
大 |
/訪問/is |
2 |
UCenterAdminist |
4655 |
45 |
/4655/is |
3 |
UCenterAdminist |
fdsaf |
dfsa |
/fdsaf/is |
4 |
UCenterAdminist |
有機會 |
在 |
/有機會/is |
組建快取資料:
//privatefunction _get_badwords() { $data = $this->db->fetch_all("SELECT * FROM ".UC_DBTABLEPRE."badwords"); $return = array(); if(is_array($data)) { foreach($data as $k => $v) { $return['findpattern'][$k] = $v['findpattern']; $return['replace'][$k] = $v['replacement']; } } return $return;}
調用方法:
$_CACHE['badwords'] = $this->base->cache('badwords');if($_CACHE['badwords']['findpattern']) { $subject = @preg_replace($_CACHE['badwords']['findpattern'], $_CACHE['badwords']['replace'], $subject); $message = @preg_replace($_CACHE['badwords']['findpattern'], $_CACHE['badwords']['replace'], $message);}
preg_replace() 的每個參數(除了 limit)都可以是一個數組。如果 pattern 和 replacement 都是數組,將以其鍵名在數組中出現的順序來進行處理。這不一定和索引的數字順序相同。如果使用索引來標識哪個 pattern 將被哪個 replacement 來替換,應該在調用 preg_replace() 之前用 ksort() 對數組進行排序。
相關推薦:
PHP產生基於文本的摩斯電碼
php文本替換指定次數
php處理文字文件重複行