1

我试图从字符串中取出脏话并认为我已经完成了,直到这个网站上的某个人向我展示了这个:http ://codepad.org/LMuhFH4g

那么,有什么办法可以让我遍历一个字符串,直到它清除所有脏话。

$a = array( 'duck', 'chit', 'dsshole' ); 

$str = 'duchitck-you-dssduckhole'; 

$newString = str_ireplace($a,'',$str); 
$newString = str_ireplace('-','',$newString); 
$newString = trim($newString); 
echo $newString;  
4

5 回答 5

12

简单的解决方案是传递第四个可选的 $count 参数。

do { 
    $str = str_ireplace(..., ..., ..., $count);
} while ($count); 

不过要真正消除诅咒的话....祝你好运。有太多的变体无法完全过滤自然语言(word、werd、w0rd、w3rd 等——如果有人想给某人起一个足够糟糕的名字,他们会找到一种方法;网站倾向于使用适度是有原因的) .


顺便说一下,这种方法是不可用的基本方法,因为它没有实际单词的概念,而只是字符串(assassinate-> inate)。您可以使用正则表达式(方便的\b单词边界),但归根结底,这一切都毫无意义

于 2013-01-02T06:25:53.303 回答
1

从 txt 文件中审查脏话的功能

PHP:

function censor($string)
{
    if ($string)
    {
        $badwords = file_get_contents("badwords.txt");
        $badwords = explode(",", $badwords);
        $replacewith = array();
        $index = 0;
        foreach ($badwords as $value) {
            $lengthOfStars = strlen($badwords[$index]) - 2;
            $replacewith[$index] = substr($badwords[$index], 0, 1).str_repeat("*", $lengthOfStars).substr($badwords[$index], -1);
            $index++;
        }
        $newstring = str_ireplace($badwords, $replacewith, $string);
        return $newstring;
    }
}

echo censor("Some swear words to censor");

坏词.txt:

发誓,话

结果:

一些 s***rw***s 要审查
于 2018-10-20T13:38:07.370 回答
0

使用此答案中的“包含”功能,您可以

$strFromSearchBox = 'duchitck you dssduckhole';
$theseWords = array('duck', 'chit', 'dsshole');

$newString = $strFromSearchBox;
while(contains($newString, $theseWords)) {
    $newString = str_replace($theseWords,'',$newString);
}

echo $newString;
于 2013-01-02T06:22:22.967 回答
0
// array of all the banned strings
$swears = array(
        "a*s",
        "t*****s"
        // add all your swear words to this array
    );

$dirtyStr = "a*s and t*****s";

// remove all the banned strings
$cleanStr = str_replace($swears, '', $dirtyStr);

echo $dirtyStr;
> a*s and t*****s

echo $cleanStr;
> and
于 2013-01-02T06:28:32.067 回答
0
function censor($string)
{
if ($string)
{
    //badwordsarray
    $badwords = array('some', 'swear', 'word');
    //replacearray                      
    $replace =  array('s**e', 's***r', 'w**d'); 

    $newstring = str_ireplace($badwords, $replace, $string);
    return $newstring;
}
}
 $message = $_POST['message'];
 $filteredmessage = censor($message);
 echo $filteredmessage;
于 2017-01-12T13:07:23.583 回答