坏词过滤if else整合

时间:2012-07-25 15:43:14

标签: php if-statement

有没有办法在下面提到的badwords过滤器代码中实现if else,这样当用户输入任何坏词时,它会给出错误“你的输入包含不允许的词”而不是替换坏词

FUNCTION BadWordFilter(&$text, $replace){

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


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



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
  }     
 }

}

$any = BadWordFilter($qtitle,1); 
$any = BadWordFilter($qtitle,0); 

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你只需要一种方法来判断函数的返回值是否表示替换或找到了“坏词”。根据您目前的情况,您已经知道如果要更换它们,您只需要在方法的末尾添加return 0;,表示没有替换或没有坏词被发现了。

我已经以应该处理这个问题的方式重写了你的样本。在重写中,我还分别使用eregi_replace()eregi()更改了preg_replace()preg_match()的使用情况。前两种方法已弃用,不应使用。此外,我还没有测试过以下内容,它只是作为一个概念验证:

function BadWordFilter(&$text, $replaceWords = false) {
    $file_array = file('/path/to/badword.txt');
    $bads = array();
    foreach ($file_array as $word_combo) $bads[] = explode(',', $word_combo);

    if ($replaceWords == true) {
        $original = $text;
        foreach ($bads as $bad) {
            // replace any bad word instance
            $text = str_replace($bad[0], $bad[1], $text);
        }
        // check if bad words have been replaced
        return ($text == $original) ? false : true;
    } else {
        foreach ($bads as $bad) {
            if (strpos($text, $bad[0]) !== false) {
                // found a bad word
                return true;
            }
        }
        // no bad words found
        return false;
    }
}

$error = '';
// replace words:
if (BadWordFilter($qtitle, true)) {
    $error = 'Your input contained bad words and they have been replaced.';
}
// don't replace words:
if (BadWordFilter($qtitle, false)) {
    $error = 'Your input contains words that are not allowed.';
}

UPDATE:在“坏词”文件中看到示例输入文本后,不需要正则表达式。我已将preg_replace()preg_match()的原始替换分别替换为str_replace()strpos()