有没有更好、更快的方法来执行以下操作?
这是一个类的方法,用于检查评论中是否包含禁止词,如果有,则需要手动批准评论。
我真的不想改变我的模型/数据库的工作方式,所以$this->get_words()
理想情况下需要保留(它返回一个对象数组,其中包含从 DB 字段生成的属性)。
PS我知道亵渎过滤器等不受欢迎,但在这种情况下,它只会发表评论,需要手动批准。
public function check_string($str) {
// Put banned words in an array
$banned_words = [];
foreach ($this->get_words() as $word) {
$banned_words[] = $word->word;
}
$patterns = array(
'/[_.-]/', '/1/', '/3/', '/4/', '/5/', '/6/',
'/7/', '/8/', '/0/', '/z/', '/@/'
);
$replacements = array(
'', 'i', 'e', 'a', 's', 'g',
't', 'b', 'o', 's', 'a'
);
// Turn str into array of individual words
$str_words = explode(" ", $str);
foreach ($str_words as $str_word) {
$str_word = strtolower(preg_replace($patterns,$replacements,$str_word));
if (in_array($str_word, $banned_words, true))
return TRUE;
}
return FALSE;
}