我正在尝试制作我自己的坏词过滤器,并且效果很好,除非我在一个句子中有多个单词。所以现在它所做的是,它从数据库中取出值,然后循环遍历它并且必须替换广告词。
让我说我有(荷兰语)这句话:Deze kanker zooi moet eens stoppen! Het is godverdomme altijd het zelfde zooitje.
。这些是必须在数据库中替换的词:
kanker
和 godverdomme
。
所以我在我的数据库中有:
一切都很好,除非必须替换 2 个 ords,然后它不想替换...
我的辅助函数:
public static function Filter($value)
{
$badwords = DB::table('badwords')->get();
foreach ($badwords as $badword)
{
$replaced = str_ireplace($badword->bad_word, $badword->replacement, $value);
}
return $replaced;
}
希望有人能帮助我:)
最诚挚的问候,
罗宾
最佳答案
对于 foreach 循环中的每次迭代,您将 $replaced
的值设置为 str_ireplace
返回的值。
在该函数的末尾,您将返回一个值,其中仅最后一个坏词应该被替换。
str_ireplace
将单个字符串值或字符串值数组替换为第一个和第二个参数,这意味着您可以创建两个数组,您可以将其填入foreach
循环,然后在循环之后运行 str_ireplace
,类似于:
$words = [];
$replace = [];
foreach ($badwords as $badword) {
array_push($words, $badword->bad_word);
array_push($replace, $badword->replacement);
}
return str_ireplace($words, $replace, $value);
关于php - Laravel 糟糕的 wordfilter 作为助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489116/