Php 更好的编码方法-检查注释中的禁用词
有没有更好、更快的方法来完成下面的工作 这是一个类中的方法,用于检查注释中是否有禁止的单词,如果有,则需要手动批准注释 我真的不想改变我的模型/数据库的工作方式,所以理想情况下需要保留Php 更好的编码方法-检查注释中的禁用词,php,regex,arrays,preg-replace,profanity,Php,Regex,Arrays,Preg Replace,Profanity,有没有更好、更快的方法来完成下面的工作 这是一个类中的方法,用于检查注释中是否有禁止的单词,如果有,则需要手动批准注释 我真的不想改变我的模型/数据库的工作方式,所以理想情况下需要保留$this->get_words()(它返回一个包含从DB字段生成的属性的对象数组) 另外,我知道亵渎过滤器等是不受欢迎的,但在这种情况下,它只会发表评论,需要手动批准 public function check_string($str) { // Put banned words in an array
$this->get_words()
(它返回一个包含从DB字段生成的属性的对象数组)
另外,我知道亵渎过滤器等是不受欢迎的,但在这种情况下,它只会发表评论,需要手动批准
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;
}
您可以将坏字和替换字放入文件中。 像这样-
badword1,replaceword1
badword2,replaceword2
badword3,replaceword3
像这样读取文件,并创建一个坏单词数组和替换单词-
$allline_arr = file('bad_word.txt');
$badword_arr = array();
foreach ($allline_arr as $line) {
$badword_arr[] = explode(',', $line);
}
-或-
现在你可以随心所欲地使用它了……你可以使用这种方法
var bannedWords = ["NO", "NO NAME", "NONAME", "MISS", "MS", "MS.", "MR", "MR.", "MRS", "MRS."];
function checkBannedWords(value) {
var rgx = new RegExp(bannedWords.join("|"), "gi");
if (value.replace(rgx,'*').indexOf('*') != -1) {
return false;
}
return true;
}
你知道真的没有办法有效地阻止所有可能的亵渎,对吧?嗨,瑟布鲁斯,我知道。正如我所说,亵渎并没有被阻止或取代——它只是意味着评论在出现在网站上之前需要得到批准。信不信由你,我们的网站上的评论实际上存在法律问题——因此,至少在大多数情况下,基于适度的亵渎的评论应该对我们有所帮助。嗯,我明白了。那么,我建议让过滤器捕捉更多。(直接后跟不带空格的字符串的数字,反之亦然,包含非ASCII字符的字符串,包含通常不在字符串中使用的标点符号的字符串:
\/|[]{}
,诸如此类的东西。好建议,我会加进去。嗨,我实际上并不是在替换坏单词。只是检查它们是否存在。从文件中读取它们会比从数据库中读取更快吗?如果你将文本存储在文件中而不是数据库中,你可以用最简单的方式修改它。你可以创建一个由逗号分隔的单词和字符组成的csv文件在php代码中,若要将这些单词存储到数据库中,请读取该文件并生成一个insert查询。
var bannedWords = ["NO", "NO NAME", "NONAME", "MISS", "MS", "MS.", "MR", "MR.", "MRS", "MRS."];
function checkBannedWords(value) {
var rgx = new RegExp(bannedWords.join("|"), "gi");
if (value.replace(rgx,'*').indexOf('*') != -1) {
return false;
}
return true;
}