Php 坏词过滤器

Php 坏词过滤器,php,replace,Php,Replace,我正在尝试使用以下功能进行坏词过滤: function sacarmalaspalabras($texto) { $palabras = Array(" sexo "," concha ", " pete "," vagina ", " culo ", " anal ", " puta ", " puto ", " putas ", " putos ", " preservativo ", " preservativos ", " orgasmo ", " porno ", " pija

我正在尝试使用以下功能进行坏词过滤:

function sacarmalaspalabras($texto) {
$palabras = Array(" sexo "," concha ", " pete "," vagina ", " culo ", " anal ", " puta ", " puto    ", " putas ", " putos ", " preservativo ", " preservativos ", " orgasmo ",  " porno ", " pija ", " teta " , " tetas ", " condon ", " masturbar ", " masturbaba ", " poronga ", " concha ", " hentai ", " gay ", " lesbiana ", " orto ", " choto ", " chota ", " marica " ," maricon ", " semen ", " garchar ", "hentai","porn"," porn " );

 $palabrasnew = Array(" s*xo "," c*ncha ", " p*te ", " v*gina ", " cul* ", "an*l ", " p*ta ", " p*to ", " p*tas ", " p*tos ", " preservativ* ", " preservativ*s ", " or**smo ", " p*rno ", " pij* ", " tet* ", " tet*s ", " cond*n ", " mastur*** ", " mast**baba ", " poron** ", " conch* " , " h**tai ", " g*y ", " lesb**na ", " ort* ", " chot* ", " chot* ", " maric* ", " maric*n ", " sem*n ", " garch** ", "h**tai", "p*rn", " p*rn " );

$texto = str_replace($palabras,$palabrasnew,$texto);

return $texto;
}
问题是,它只在空白之间替换单词,比如说我想过滤单词“ass”,如果有人说:“that ass,other thing”,由于逗号的缘故,它不会替换它。但是我也想防止其他词中的词被替换,比如说我试图过滤“性”这个词,但我不想过滤“性”


如何在str_replace上使用通配符?所以它有点像%ass%,可能会有一些单词落在过滤器中,但它将是少数。

我会先说我不懂PHP,但看起来您可能可以尝试使用正则表达式来实现通配符

也就是说,我见过一些实施得相当糟糕的“粗话过滤器”,它们往往是这样的

比你想象的更多的话会被触发。从我的头顶上。。。组装,黄铜,缝合(我自己的网名因为“tit”:p而被屏蔽)


因此,如果很多人都会看到它,那么您可能希望尝试更强大的功能。

我会在前面说我不懂PHP,但看起来您可能可以尝试使用正则表达式来实现您的通配符

也就是说,我见过一些实施得相当糟糕的“粗话过滤器”,它们往往是这样的

比你想象的更多的话会被触发。从我的头顶上。。。组装,黄铜,缝合(我自己的网名因为“tit”:p而被屏蔽)


因此,如果这是很多人都会看到的东西,你可能想尝试一些更坚固的东西。

你可以使用
preg\u replace
,而不是使用
str\u replace
,并用单词边界将你的每个马拉斯宫围起来
\b
。将
$palabras
数组更改为
“/\bsexo\b/”
“/\bconcha\b/”
等,并使用
$texto=preg\u replace($palabras,$palabrasnew,$texto)。这将只替换确切的单词,而不是单词中的匹配项


这就是说(正如其他人所提到的),淫秽过滤器是出了名的难以(不可能?)正确实施的,所以你可能在浪费时间…

你可以使用
preg\u replace
,并用单词边界包围你的每个马拉斯宫
\b
。将
$palabras
数组更改为
“/\bsexo\b/”
“/\bconcha\b/”
等,并使用
$texto=preg\u replace($palabras,$palabrasnew,$texto)。这将只替换确切的单词,而不是单词中的匹配项


也就是说(正如其他人所提到的),淫秽过滤器很难(不可能?)正确实现,因此您可能在浪费时间…

这里是使用preg\u replace的函数

function sacarmalaspalabras($texto) {
$palabras = Array("/\bsexo\b/i", "/\bconcha\b/i", "/\bpete\b/i", "/\bvagina\b/i", "/\bculo\b/i", "/\banal\b/i", "/\bputa\b/i", "/\bputo\b/i", "/\bputas\b/i", "/\bputos\b/i", "/\bpreservativo\b/i", "/\bpreservativos\b/i", "/\borgasmo\b/i", "/\bporno\b/i", "/\bpija\b/i", "/\bteta\b/i", "/\btetas\b/i", "/\bcondon\b/i", "/\bmasturbar\b/i", "/\bmasturbaba\b/i", "/\bporonga\b/i", "/\bconcha\b/i", "/\bhentai\b/i", "/\bgay\b/i", "/\blesbiana\b/i", "/\borto\b/i", "/\bchoto\b/i", "/\bchota\b/i", "/\bmarica\b/i", "/\bmaricon\b/i", "/\bsemen\b/i", "/\bgarchar\b/i", "/\bhentai\b/i", "/\bporn\b/i", "/\bporn\b/i");

  $palabrasnew = Array("s*xo", "c*ncha", "p*te", "v*gina", "cul*", "an*l", "p*ta", "p*to", "p*tas", "p*tos", "preservativ*", "preservativ*s", "or**smo", "p*rno", "pij*", "tet*", "tet*s", "cond*n", "mastur***", "mast**baba", "poron**", "conch*", "h**tai", "g*y", "lesb**na", "ort*", "chot*", "chot*", "maric*", "maric*n", "sem*n", "garch**", "h**tai", "p*rn", "p*rn");

  $texto = preg_replace($palabras,$palabrasnew,$texto);

  return $texto;
}
您可以通过如下方式运行一行来测试它:

echo sacarmalaspalabras("Sexologist sexo sexu osex");

输出是:性学家s*xo sexu osex

这里是使用preg\u replace的函数

function sacarmalaspalabras($texto) {
$palabras = Array("/\bsexo\b/i", "/\bconcha\b/i", "/\bpete\b/i", "/\bvagina\b/i", "/\bculo\b/i", "/\banal\b/i", "/\bputa\b/i", "/\bputo\b/i", "/\bputas\b/i", "/\bputos\b/i", "/\bpreservativo\b/i", "/\bpreservativos\b/i", "/\borgasmo\b/i", "/\bporno\b/i", "/\bpija\b/i", "/\bteta\b/i", "/\btetas\b/i", "/\bcondon\b/i", "/\bmasturbar\b/i", "/\bmasturbaba\b/i", "/\bporonga\b/i", "/\bconcha\b/i", "/\bhentai\b/i", "/\bgay\b/i", "/\blesbiana\b/i", "/\borto\b/i", "/\bchoto\b/i", "/\bchota\b/i", "/\bmarica\b/i", "/\bmaricon\b/i", "/\bsemen\b/i", "/\bgarchar\b/i", "/\bhentai\b/i", "/\bporn\b/i", "/\bporn\b/i");

  $palabrasnew = Array("s*xo", "c*ncha", "p*te", "v*gina", "cul*", "an*l", "p*ta", "p*to", "p*tas", "p*tos", "preservativ*", "preservativ*s", "or**smo", "p*rno", "pij*", "tet*", "tet*s", "cond*n", "mastur***", "mast**baba", "poron**", "conch*", "h**tai", "g*y", "lesb**na", "ort*", "chot*", "chot*", "maric*", "maric*n", "sem*n", "garch**", "h**tai", "p*rn", "p*rn");

  $texto = preg_replace($palabras,$palabrasnew,$texto);

  return $texto;
}
您可以通过如下方式运行一行来测试它:

echo sacarmalaspalabras("Sexologist sexo sexu osex");

结果是:性学家s*xo sexu osex

为什么你的数组首先包含空格?我想他会这样做,所以请确保这是一个新词:)当医学术语是一个不好的词时,看看这个-效果很好。@Fred ii-我只是想建议这个链接。那家伙给出的答案太棒了!;-)当然是开玩笑了。它可能会过滤
sexuality
。为什么你的数组首先包含空格?我想他会这样做,所以请确保这是一个新词:)当医学术语是一个不好的词时,请看这个-效果很好。@Fred ii-我只是想建议这个链接。那家伙给出的答案太棒了!;-)当然是开玩笑了。它可能会过滤
sexuality
。谢谢!这是真的,可能有点困难,但西班牙语中的同位语比英语中的要少!谢谢这是真的,可能有点困难,但西班牙语中的同位语比英语中的要少!好极了!非常感谢,有没有一种方法可以使它不区分大小写,这样它就可以检测到SEX@gabrielmellace说得好!它已经不区分大小写了-这就是“/”后面的“i”在“/\bsexo\b/i”excelent中的意思!非常感谢,有没有一种方法可以使它不区分大小写,这样它就可以检测到SEX@gabrielmellace说得好!它已经不区分大小写了-这就是“/”后面的“i”在“/\bsexo\b/i”中的意思