思路:
一、把關鍵字專門寫在一個文字檔裡,每行一個,數量不限,有多少寫多少。
二、PHP讀取關鍵字文本,存入一個數組
三、遍曆關鍵字數組,挨個用strpos函數去看看內容有沒有關鍵字,如果有,返回true,沒有則返回false
PHP代碼如下:
代碼如下 |
複製代碼 |
/* PHP中用strpos函數過濾關鍵字 */ // 關鍵字過濾函數 function keyWordCheck($content){ // 去除空白 $content = trim($content); // 讀取關鍵字文本 $content = @file_get_contents('keyWords.txt'); // 轉換成數組 $arr = explode("n", $content); // 遍曆檢測 for($i=0,$k=count($arr);$i<$k;$i++){ // 如果此數組元素為空白則跳過此次迴圈 if($arr[$i]==''){ continue; } // 如果檢測到關鍵字,則返回匹配的關鍵字,並終止運行 if(@strpos($str,trim($arr[$i]))!==false){ //$i=$k; return $arr[$i]; } } // 如果沒有檢測到關鍵字則返回false return false; } $content = '這裡是要發布的常值內容。。。'; // 過濾關鍵字 $keyWord = keyWordCheck($content); // 判斷是否存在關鍵字 if($keyWord){ echo '你發布的內容存在關鍵字'.$keyWord; }else{ echo '恭喜!通過關鍵字檢測'; // 往下可以進行寫庫操作完成發布動作。 } |
例子2 (註:中文關鍵字過濾時使用的關鍵字檔案為utf-8編碼
代碼如下 |
複製代碼 |
/** * 被禁止的關鍵字檢測 * * @param string $string 要檢測的字串 * @param string $fileName 屏蔽關鍵字檔案 * @return bool */ function banwordCheck( $string, $fileName ) { if ( !($words = file_get_contents( $fileName )) ){ die('file read error!'); } $string = strtolower($string); $matched = preg_match('/'.$words.'/i', $string, $result); if ( $matched && isset($result[0]) && strlen($result[0]) > 0 ) { if ( strlen($result[0]) == 2 ){ $matched = preg_match('/'.$words.'/iu', $string, $result); } if ( $matched && isset($result[0]) && strlen($result[0]) > 0 ) { return true; }else{ return false; } }else{ return false; } }
$content = '測試關鍵字'; if ( banwordCheck($content, './banwords.txt') ){ echo "matched! "; }else{ echo "no match! "; } |