PHP,使用str_replace过滤特定单词

时间:2013-05-20 21:44:11

标签: php

基本上,我目前有这行代码:

$uname = str_replace(array('!','"','£','$','%','%','^','&','*','(',')','-','+','=','\\','/','[',']','{','}',';',':','@','#','~','<',',','>','.','?','|',' '), '', $uname);

我知道它很乱,我以前从未在这个“背景”中使用它

无论如何,无论如何我还有另一个坏词的数组吗?例如:

$uname = str_replace(array)('!','"','£','$','%','%'), '', $uname);
         str_replace(array)('badword1','badword2'), '****', $uname);

以上基本上就是我想要的,但如果它们是一种更简洁的方式,那么就像这样做,但欢迎任何帮助。

2 个答案:

答案 0 :(得分:8)

您不需要创建两个或更多str_replace()个实例,因为只使用一个可以替换尽可能多的单词。

首先,您必须为要过滤的每个坏词创建一个“组”,并将它们放在array内。

Example:

$bannedWords = array('shit', 'john mccain', 'jack and jill', 'IE6'); 

如果变量包含禁止词列表中的单词,那么您可能想先检查一下。为此,您可以使用PHP的in_array()函数:

if(in_array($_POST['keyword'], $bannedWords)){

   // keyword not allowed, 
}

在此之后,如果您要替换该单词,请使用str_replace()作为:

$replaced = str_replace($bannedWords, "", $_POST['keyword']);

这将删除所有单词并将其替换为空,如果您已通过"x"而不是""作为第二个参数,那么它们将全部替换为x

#finally:

通过将数组作为str_replace的第二个参数传递,您可以定义一个唯一的单词来替换每个唯一的禁用单词:

str_replace(['IE6', 'mccain', 'shit'], ['FireFox', 'roosevelt', 'Cake'], $_POST['keyword'])

现在从$_POST['keyword']开始,IE6将替换为FireFox,mccain将替换为罗斯福等等。

答案 1 :(得分:0)

$remove = new Array("noob", "racist", "hate", "gay", "etc");
$text = str_replace($remove, "", $post);
echo $text;

这是一种这样做的方式。如果你从post获得字符串,你可以创建一个删除数组,make一个文本变量用帖子中的""替换数组。您可以回显文本,而不是发布,然后在显示回显文本时,不会显示数组中的任何单词。