2

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

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

我知道它很乱,我以前从未在这种“上下文”中使用过它

无论如何,无论如何我可以为坏词准备另一个数组吗?例子:

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

以上基本上是我想要的,但是如果他们是一种更简洁的方法我会这样做,但是欢迎任何帮助。

4

2 回答 2

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()as:

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

这将删除所有单词并将它们替换为任何内容,如果您通过"x"而不是""作为第二个参数传递,那么它们都将被替换为x

# 最后:

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

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

现在从$_POST['keyword']单词 IE6 将替换为 FireFox with,mccain with roosevelt 等等..

于 2013-05-20T21:45:58.640 回答
0
$remove = new Array("noob", "racist", "hate", "gay", "etc");
$text = str_replace($remove, "", $post);
echo $text;

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

于 2014-11-09T00:02:28.737 回答