PHP过滤坏词

时间:2012-07-17 13:39:17

标签: php

我在下面有一个过滤坏字代码 我想用.txt文件替换这个ARRAY,以便我可以将所有坏词放入txt文件中,或者有没有办法使用MYSQL数据库存储坏词然后从那里调用?

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); 

4 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:1)

你可以做任何一个......

您可以使用file_get_contents()之类的内容从文件中读取内容,或使用MySQL API查询数据库中的错误字词。

您是否设置了数据库架构?此外,不推荐使用eregi_replace()。请改用preg_replace()

答案 2 :(得分:0)

你可以使用MYSQL。

只需要一个包含两列的表:单词和替换。

然后在您的代码中,您将需要连接到数据库并读取每一行。但是,您可以将每一行存储在一个数组中。

结果与您当前的数组结构非常相似。

要连接数据库,请使用以下教程。 http://www.homeandlearn.co.uk/php/php13p1.html

答案 3 :(得分:0)

是的,像bad_words.txt一样创建一个带有条目的文件(注意每个单词组合在一个单独的行上):

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

然后将该文件读入如下数组:

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

然后创建一个像$ bads数组一样的数组:

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

希望这有帮助。