本文分析了ucenter中詞語過濾原理。分享給大家供大家參考,具體如下:
過濾詞語表:
id | admin | find | replacement | findpattern |
1 | UCenterAdminist | 訪問 | 大 | /訪問/is |
2 | UCenterAdminist | 4655 | 45 | /4655/is |
3 | UCenterAdminist | fdsaf | dfsa | /fdsaf/is |
4 | UCenterAdminist | 有機會 | 在 | /有機會/is |
組建緩存數據:
1
2
3
4
5
6
7
8
9
10
11
12
|
//private function _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 ; } |
調用方法:
1
2
3
4
5
|
$_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程序設計有所幫助。