2012-07-17 44 views
0

我有一個過濾器壞字代碼如下 我想用.txt文件替換這個ARRAY,這樣我就可以把所有壞字都放到txt文件中,或者有什麼方法可以使用MYSQL數據庫存儲壞字,然後從那裏打電話?PHP過濾器壞字

FUNCTION BadWordFilter(&$text, $replace){ 

$bads = ARRAY (
     ARRAY("butt","b***"), 
     ARRAY("poop","p***"), 
     ARRAY("crap","c***") 
); 

IF($replace==1) {          //we are replacing 
     $remember = $text; 

     FOR($i=0;$i<sizeof($bads);$i++) {    //go through each bad word 
      $text = EREGI_REPLACE($bads[$i][0],$bads[$i][1],$text); //replace it 
     } 

     IF($remember!=$text) RETURN 1;      //if there are any changes, return 1 

} ELSE {             //we are just checking 

     FOR($i=0;$i<sizeof($bads);$i++) {    //go through each bad word 
      IF(EREGI($bads[$i][0],$text)) RETURN 1; //if we find any, return 1 
     }  
} 
} 

$qtitle = BadWordFilter($wordsToFilter,1); 
+3

是,無論是TXT和DB是可能的一個功能。你有什麼問題?有什麼問題? – 2012-07-17 13:40:50

+4

我感覺[clbuttic的錯誤](http://thedailywtf.com/Articles/The-Clbuttic-Mistake-.aspx),或在這種情況下,[審查b *** erfly](http:// en。 wikipedia.org/wiki/Scunthorpe_problem) – phihag 2012-07-17 13:47:44

回答

0

是使像等(注意每個字的組合是在一個單獨的線)的條目bad_words.txt一個文件:

butt,b*** 
poop,p*** 
crap,c*** 

然後讀該文件到一個數組像這樣:

$file_array = file('/path/to/bad_word.txt'); 

然後創建像你$劣品數組的數組做到這一點:

$bads = array(); 
foreach ($file_array as $word_combo) { 
    $bads[] = explode(',', $word_combo); 
} 

希望這有助於。

0

您可以使用MYSQL。

只是有一個兩列的表:單詞和替換。

然後在您的代碼中,您將需要連接到數據庫並讀取每一行。但是,您可以將每行存儲在一個數組中。

結果將非常類似於您當前的數組結構。

要連接到數據庫,請使用下面的教程。 http://www.homeandlearn.co.uk/php/php13p1.html

1

你可以做要麼...

您可以使用類似file_get_contents()從文件讀入,或使用MySQL API來查詢數據庫的不好的話。

您是否設置了數據庫模式?此外,eregi_replace()已棄用。改爲使用preg_replace()

4

我只是開發了可以過濾掉不好的話

function hate_bad($str) 
{ 
    $bad = array("shit","ass"); 
    $piece = explode(" ",$str); 
    for($i=0; $i < sizeof($bad); $i++) 
    { 
     for($j=0; $j < sizeof($piece); $j++) 
     { 
      if($bad[$i] == $piece[$j]) 
      { 
       $piece[$j] = " ***** "; 
      } 
     } 
    } 

    return $piece; 
} 

,並調用它

$str = $_REQUEST['bad']; //'bad' is the name of the text field here 
$good = hate_bad($str); 

if(isset($_REQUEST['filter'])) //'filter' is the name of button 
{ 
    for($i=0; $i < sizeof($good); $i++) 
    { 
     echo $good[$i]; 
    } 
}