我已经编写了这个脚本来过滤坏词,但我想使用(if语句),如果在文本中找到$ bad words echo out(" bad text"),如果没有&t发现了回声("干净的文字"):
function badWords($text){
$bad = array('dirty','butt','lips');
//echo out
$rep = array('***','***','***');
for ($i=0; $i < count($bad); $i++){
$text = str_replace($bad[$i], $rep[$i], $text);
}
echo $text;
}
//the text
$text = " this is a dirty text test no butt here and no lips ";
badWords($text);
答案 0 :(得分:1)
这应该有效:
function badWords($text){
$bad = array('dirty','butt','lips');
$rep = array('***','***','***');
$text = str_replace($bad, $rep, $text);
return $text;
}
//the text
$text = " this is a dirty text test no butt here and no lips ";
if ($text != badWords($text)){
echo " bad text ";
} else {
echo " clean text ";
}
我刚刚返回了新文本并进行了比较,我还通过将数组传递给str_replace
函数来改进代码,因为它可以直接使用它们。 (并删除空格......)
正如@Naumov在评论中指出的那样,带***的数组可以删除...(如果它总是三个星号......)
答案 1 :(得分:1)
这是一个以更好的方式完成您想要的代码
function badWords($text)
{
$bad = array('dirty','butt','lips');
for ($i=0; $i < count($bad); $i++)
{
$position = strpos($text, $bad[$i]);
while($position !== false)//if text contains a bad word
{
for($j=$position; $j<$position+strlen($bad[$i]); $j++)
$text[$j]='*';
$position = strpos($text, $bad[$i]);
}
}
echo $text;
}
$text = " this is a dirty text test no butt here and no lips ";
badWords($text);
输出是
this is a ***** text test no **** here and no ****
这将用*替换所有不良单词并保持其长度。它的工作方式是,首先循环所有坏词,并检查strpos
是否为假。如果它是假的,那么文本不包含坏词。如果它不是假的,那么strpos
将返回$text
中坏词的第一个字母的位置。然后从第一个位置循环到最后一个位置,这是坏词的长度,并用*
替换每个字符。
答案 2 :(得分:0)
strpos将允许您确定字符串是否包含单词。试试这个例子。
$containsBad = false;
for ($i=0; $i < count($bad); $i++){
$pos = strpos($text, $bad[$i]);
if ($pos !== false) {
$containsBad = true;
break;
}
}
if ($containsBad) {
// the text contains a bad word
}
答案 3 :(得分:0)
你想使用str_replace的最后一个参数,即count
function badWords($text){
$totalReplacements = 0;
$count = 0;
$bad = array('dirty','butt','lips');
//echo out
$rep = array('***','***','***');
for ($i=0; $i < count($bad); $i++){
$text = str_replace($bad[$i], $rep[$i], $text, $count);
$totalReplacements += $count;
}
echo $text;
if ($totalReplacements > 0){
echo "Bad";
} else {
echo "Good";
}
}
作为附注,如果您缩进代码,您将获得更易读和可维护的代码
EDIT,
生成星星的一些更干净的代码
<?php
function badWords($text)
{
$count = 0;
$bad = array_flip([
'dirty',
'butt',
'lips',
]);
array_walk(
$bad,
function (&$value, $key)
{
$value = str_repeat('*', strlen($key));
}
);
$text = str_replace(array_keys($bad), $bad, $text, $count);
echo $text;
if ($count > 0){
echo "Bad";
} else {
echo "Good";
}
return $text;
}
$text = " this is a dirty text test no butt here and no lips ";
badWords($text);
答案 4 :(得分:0)
这是一个例子。此解决方案也不区分大小写:
<?php
function filter_bad_words($text, $badWords, &$badWordCount)
{
return str_ireplace($badWords, "***", $text, $badWordCount);
}
$badWordCount;
$badWords = ["terrorists", "obama", "goons"];
$text = "The real terrorists are Obama and his goons.";
print filter_bad_words($text, $badWords, $badWordCount) . "\n";
print "Replacements: {$badWordCount}\n";
if($badWordCount > 0)
print "Suspected terrorism in text\n";