¿Cómo implementar un buen filtro de blasfemia?


Muchos de nosotros necesitamos lidiar con la entrada del usuario, las consultas de búsqueda y las situaciones en las que el texto de entrada puede contener blasfemias o lenguaje indeseable. A menudo esto necesita ser filtrado.

¿Dónde se puede encontrar una buena lista de malas palabras en varios idiomas y dialectos?

¿Hay API disponibles para las fuentes que contienen buenas listas? O tal vez una API que simplemente dice "sí, esto está limpio" o "no, esto está sucio" con algunos parámetros?

¿Cuáles son algunos buenos ¿métodos para atrapar a la gente que intenta engañar al sistema, como un$ $, azz o un a55?

Puntos de bonificación si ofrece soluciones para PHP. :)

Editar: Respuesta a las respuestas que dicen simplemente evitar el problema programático:

Creo que hay un lugar para este tipo de filtro cuando, por ejemplo, un usuario puede usar la búsqueda pública de imágenes para encontrar imágenes que se agregan a un grupo comunitario sensible. Si pueden buscar "pene", entonces es probable que obtengan muchas fotos de, sí. Si no quiero imágenes de eso, entonces prevenir la palabra como un término de búsqueda es un buen guardián, aunque es cierto que no es un método infalible. Obtener la lista de palabras en primer lugar es la verdadera pregunta.

Así que realmente me estoy refiriendo a una forma de averiguar de un solo token es sucio o no y luego simplemente rechazarlo. No me molestaría en prevenir un sentimiento como el totalmente hilarante "jirafa de cuello largo" referencia. No puedes hacer nada allí. :)

Author: codeforester, 2008-11-07

20 answers

Filtros de Obscenidad: ¿Mala Idea, o Mala Idea Increíblemente Intercurrente?

Además, uno no puede olvidar La Historia incalculable de SpeedChat de Toontown, donde incluso el uso de una "lista blanca de palabras seguras" resultó en que un niño de 14 años lo eludiera rápidamente con: "Quiero meter mi Jirafa de cuello largo en tu esponjoso conejito blanco."

Conclusión: En última instancia, para cualquier sistema que implemente, no hay absolutamente ningún sustituto para la revisión humana (ya sea por pares o de lo contrario). Siéntase libre de implementar una herramienta rudimentaria para deshacerse de los drive-by, pero para el troll determinado, absolutamente debe tener un enfoque no basado en algoritmos.

Un sistema que elimina el anonimato e introduce la responsabilidad (algo que Stack Overflow hace bien) también es útil, particularmente para ayudar a combatir G. I. F. T. de John Gabriel

También preguntó dónde puede obtener listas de blasfemias para comenzar one un proyecto de código abierto para revisar es Dansguardian check echa un vistazo al código fuente de sus listas de blasfemias predeterminadas. También hay un tercero adicional Lista de frases que puede descargar para el proxy que puede ser un punto de recolección útil para usted.

Editar en respuesta a la pregunta editar: Gracias por la aclaración sobre lo que estás tratando de hacer. En ese caso, si solo estás tratando de hacer un simple filtro de palabras, hay dos maneras de hacerlo. Uno es crear una sola expresión regular larga con todos los las frases prohibidas que desea censurar, y simplemente hacer una expresión regular buscar / reemplazar con él. Una expresión regular como:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

Y ejecútelo en su cadena de entrada usando preg_match () para probar al por mayor para un hit,

O preg_replace() para borrarlos.

También puede cargar esas funciones con matrices en lugar de una sola expresión regular larga, y para listas de palabras largas, puede ser más manejable. Vea el preg_replace () para algunos buenos ejemplos de cómo los arrays pueden ser se utiliza con flexibilidad.

Para ejemplos de programación PHP adicionales, vea esta página para una clase genérica algo avanzada para el filtrado de palabras que *'s fuera de las letras centrales de las palabras censuradas, y esta pregunta anterior de Desbordamiento de pila que también tiene un ejemplo de PHP (la parte valiosa principal es el enfoque de palabras filtradas basado en SQL -- el compensador de leet-speak se puede prescindir si lo encuentra innecesario).

También agregaste: "Obteniendo la lista de palabras en primer lugar está la verdadera pregunta." addition además de algunos de los enlaces Dansgaurdianos anteriores, puede encontrar esto útil .zip de 458 palabras para ser útil.

 165
Author: HanClinto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:17

Aunque sé que esta pregunta es bastante antigua, pero es una pregunta que ocurre comúnmente...

Hay una razón y una necesidad clara de filtros de blasfemia (ver entrada de Wikipedia aquí), pero a menudo no son 100% precisos por razones muy distintas; Contexto y precisión.

Depende (totalmente) de lo que estás tratando de lograr - en lo más básico, probablemente estés tratando de cubrir las " siete palabras sucias" y algo más... Algunas empresas necesitan filtrar lo más básico de la blasfemia: malas palabras básicas, URL o incluso información personal, etc., pero otras necesitan evitar el nombre ilícito de cuentas (Xbox Live es un ejemplo) o mucho más...

El contenido generado por el usuario no solo contiene posibles malas palabras, también puede contener referencias ofensivas a:

  • Actos sexuales
  • Orientación sexual
  • Religión
  • Etnicidad
  • Etc...

Y potencialmente, en varios idiomas. Shutterstock ha desarrollado listas básicas de palabras sucias en 10 idiomas hasta la fecha, pero sigue siendo básica y muy orientada hacia sus necesidades de 'etiquetado'. Hay una serie de otras listas disponibles en la web.

Estoy de acuerdo con la respuesta aceptada de que no es una ciencia definida y ya queel lenguaje es un desafío en continua evolución pero uno donde una tasa de captura del 90% es mejor que 0%. Depende puramente de sus objetivos-lo que está tratando de lograr, el nivel de apoyo que tiene y lo importante que es eliminar las blasfemias de diferentes tipos.

Al crear un filtro, debe considerar los siguientes elementos y cómo se relacionan con su proyecto:

  • Palabras / frases
  • Siglas (FOAD/LMFAO, etc.)
  • Falsos positivos (palabras, lugares y nombres como "mishit', 'scunthorpe' y 'titsworth')
  • URLs (los sitios porno son un objetivo obvio)
  • Información personal (correo electrónico, dirección, teléfono, etc.-si corresponde)
  • Elección de idioma (generalmente inglés por defecto)
  • Moderación (cómo, si es que puede interactuar con el contenido generado por el usuario y qué puede hacer con él)

Puedes crear fácilmente un filtro de profanidad que capture más del 90% de las profanidades, pero nunca alcanzarás el 100%. Simplemente no es posible. Cuanto más cerca quieras llegar al 100%, más difícil se vuelve... Haber construido un complejo motor de blasfemia en el pasado que trató con más de 500K mensajes en tiempo real por día, me gustaría ofrecer los siguientes consejos:

Un filtro básico implicaría:

  • Construyendo una lista de blasfemias aplicables
  • Desarrollar un método para tratar con derivaciones de profanidades

Un archivador moderadamente complejo implicaría, (Además de un filtro básico):

  • Usando la coincidencia de patrones complejos para tratar con derivaciones extendidas (usando expresiones regulares avanzadas)
  • Tratar con Leetspeak (l33t)
  • Tratar con falsos positivos

Un filtro complejo implicaría varios de los siguientes (además de un filtro moderado):

 37
Author: nickhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-19 05:42:52

No conozco ninguna buena biblioteca para esto, pero hagas lo que hagas, asegúrate de errar en la dirección de dejar pasar las cosas. He tratado con sistemas que no me permitirían usar " mpassell "como nombre de usuario, porque contiene" ass " como subcadena. Esa es una gran manera de alienar a los usuarios!

 24
Author: Matt Passell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:26:00

Durante una entrevista de trabajo mía, el CTO de la compañía que me estaba entrevistando probó un juego de palabras/web que escribí en Java. De una lista de palabras de todo el Oxford English dictionary, ¿cuál fue la primera palabra que surgió para ser adivinada?

Por supuesto, la palabra más asquerosa en el idioma inglés.

De alguna manera, todavía recibí la oferta de trabajo, pero luego rastreé una lista de palabras profanas (no a diferencia de esta) y escribí un script rápido para generar un nuevo diccionario sin todos los malas palabras (sin siquiera tener que mirar la lista).

Para su caso particular, creo que comparar la búsqueda con palabras reales suena como el camino a seguir con una lista de palabras como esa. Los estilos alternativos / puntuación requieren un poco más de trabajo, pero dudo que los usuarios lo usen lo suficiente como para ser un problema.

 23
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 22:36:23

Un sistema de filtrado de blasfemias nunca será perfecto, incluso si el programador es arrogante y se mantiene al tanto de todos los desarrollos desnudos

Dicho esto, cualquier lista de 'palabras traviesas' es probable que funcione tan bien como cualquier otra lista, ya que el problema subyacente es la comprensión del lenguaje que es bastante intratable con la tecnología actual

Entonces, la única solución práctica es doble:

  1. esté preparado para actualizar su diccionario con frecuencia
  2. hire a editor humano para corregir falsos positivos (por ejemplo, "clbuttic" en lugar de "classic") y falsos negativos (oops! olvidó!)
 21
Author: Steven A. Lowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-24 20:49:48
 13
Author: Tim Cavanaugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:27:24

La única manera de evitar la entrada ofensiva del usuario es evitar toda la entrada del usuario.

Si insistes en permitir la entrada del usuario y necesitas moderación, entonces incorpora moderadores humanos.

 12
Author: Axel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:42:39

Con respecto a su pregunta de "engañar al sistema", puede manejar eso normalizando tanto la lista de "malas palabras" como el texto introducido por el usuario antes de realizar su búsqueda. por ejemplo, Use una serie de expresiones regulares (o tr si PHP lo tiene) para convertir [z 5 5] a "s", [4@] a "a", etc., luego compare la lista normalizada de "malas palabras" con el texto normalizado. Tenga en cuenta que la normalización podría conducir potencialmente a falsos positivos adicionales, aunque no puedo pensar en ningún caso real en momento.

El desafío más grande es llegar a algo que permita a la gente citar "El bolígrafo es más poderoso que la espada" mientras bloquea "p e n i s".

 7
Author: Dave Sherohman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-08 01:35:13

Tenga cuidado con los problemas de localización: lo que es una palabrota en un idioma podría ser una palabra perfectamente normal en otro.

Un ejemplo actual de esto: ebay utiliza un enfoque de diccionario para filtrar "malas palabras" de la retroalimentación. Si intenta ingresar la traducción alemana de "esta fue una transacción perfecta" ("das war eine perfekte Transaktion"), ebay rechazará la retroalimentación debido a malas palabras.

¿Por qué? Porque la palabra alemana para " era " es "guerra", y" guerra "está en el diccionario ebay de" malo palabra".

Así que ten cuidado con los problemas de localización.

 7
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-27 12:55:55

Si puede hacer algo como Digg/Stackoverflow donde los usuarios pueden votar/marcar contenido obsceno... haciéndolo.

Entonces todo lo que necesitas hacer es revisar a los usuarios "traviesos" y bloquearlos si rompen las reglas.

 6
Author: scunliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:46:59

Llego un poco tarde a la fiesta, pero tengo una solución que podría funcionar para algunos que leen esto. Está en javascript en lugar de php, pero hay una razón válida para ello.

Divulgación completa, escribí este plugin...

De todos modos.

El enfoque que he seguido es permitir que un usuario "Opt-In" a su filtrado de blasfemias. Básicamente, la blasfemia se permitirá por defecto, pero si mis usuarios no quieren leerla, no tienen que hacerlo. Esto también ayuda con el "l33t sp3 @ k " issue.

El concepto es un complemento simple jquery que es inyectado por el servidor si la cuenta del cliente está habilitando el filtrado de blasfemias. A partir de ahí, son solo un par de líneas simples que borran las palabrotas.

Aquí está la página de demostración
https://chaseflorell.github.io/jQuery.ProfanityFilter/demo/

<div id="foo">
    ass will fail but password will not
</div>

<script>
    // code:
    $('#foo').profanityFilter({
        customSwears: ['ass']
    });
</script>

Resultado

* * * fallará pero la contraseña no

 4
Author: Chase Florell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-19 20:01:53

Estoy de acuerdo con el post de HanClinto más arriba en esta discusión. Generalmente uso expresiones regulares para hacer coincidir el texto de entrada con la cadena. Y este es un esfuerzo vano, ya que, como mencionaste originalmente, tienes que explicar explícitamente cada forma de truco de escritura popular en la red en tu lista "bloqueada".

En una nota al margen, mientras otros están debatiendo la ética de la censura, debo estar de acuerdo en que alguna forma es necesaria en la web. Algunas personas simplemente disfrutan publicando vulgaridad porque puede ser instantáneamente ofensivo para un gran cuerpo de personas, y no requiere absolutamente ningún pensamiento por parte del autor.

Gracias por las ideas.

¡HanClinto manda!

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-24 20:30:20

Una vez que tengas una buena tabla MYSQL de algunas palabras malas que quieras filtrar (empecé con uno de los enlaces de este hilo), puedes hacer algo como esto:

$errors = array();  //Initialize error array (I use this with all my PHP form validations)

$SCREENNAME = mysql_real_escape_string($_POST['SCREENNAME']); //Escape the input data to prevent SQL injection when you query the profanity table.

$ProfanityCheckString = strtoupper($SCREENNAME); //Make the input string uppercase (so that 'BaDwOrD' is the same as 'BADWORD').  All your values in the profanity table will need to be UPPERCASE for this to work.

$ProfanityCheckString = preg_replace('/[_-]/','',$ProfanityCheckString); //I allow alphanumeric, underscores, and dashes...nothing else (I control this with PHP form validation).  Pull out non-alphanumeric characters so 'B-A-D-W-O-R-D' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/1/','I',$ProfanityCheckString); //Replace common numeric representations of letters so '84DW0RD' shows up as 'BADWORD'.

$ProfanityCheckString = preg_replace('/3/','E',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/4/','A',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/5/','S',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/6/','G',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/7/','T',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/8/','B',$ProfanityCheckString);

$ProfanityCheckString = preg_replace('/0/','O',$ProfanityCheckString); //Replace ZERO's with O's (Capital letter o's).

$ProfanityCheckString = preg_replace('/Z/','S',$ProfanityCheckString); //Replace Z's with S's, another common substitution.  Make sure you replace Z's with S's in your profanity database for this to work properly.  Same with all the numbers too--having S3X7 in your database won't work, since this code would render that string as 'SEXY'.  The profanity table should have the "rendered" version of the bad words.

$CheckProfanity = mysql_query("SELECT * FROM DATABASE.TABLE p WHERE p.WORD = '".$ProfanityCheckString."'");
if(mysql_num_rows($CheckProfanity) > 0) {$errors[] = 'Please select another Screen Name.';} //Check your profanity table for the scrubbed input.  You could get real crazy using LIKE and wildcards, but I only want a simple profanity filter.

if (count($errors) > 0) {foreach($errors as $error) {$errorString .= "<span class='PHPError'>$error</span><br /><br />";} echo $errorString;} //Echo any PHP errors that come out of the validation, including any profanity flagging.


//You can also use these lines to troubleshoot.
//echo $ProfanityCheckString;
//echo "<br />";
//echo mysql_error();
//echo "<br />";

Estoy seguro de que hay una manera más eficiente de hacer todos esos reemplazos, pero no soy lo suficientemente inteligente como para averiguarlo (y esto parece funcionar bien, aunque ineficientemente).

Creo que deberías equivocarte al permitir que los usuarios se registren, y usar humanos para filtrar y agregar a tu tabla de blasfemias según sea necesario. Aunque todo depende del costo de un falso positivo (palabra aceptable marcada como malo) versus un falso negativo (palabra mala se transmite). En última instancia, eso debería gobernar qué tan agresivo o conservador eres en tu estrategia de filtrado.

También sería muy cuidadoso si desea usar comodines, ya que a veces pueden comportarse de manera más onerosa de lo que pretende.

 2
Author: andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-16 02:33:47

Recogí 2200 malas palabras en 12 idiomas: en, ar, cs, da, de, eo, es, fa, fi, fr, hi, hu, it, ja, ko, nl, no, pl, pt, ru, sv, th, tlh, tr, zh.

Las opciones MySQL dump, JSON, XML o CSV están disponibles.

Https://github.com/turalus/openDB

Le sugiero que ejecute este SQL en su base de datos y verifique cada vez que el usuario ingrese algo.

 2
Author: Tural Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-03 08:22:10

Francamente, les dejaría sacar las palabras de "engañar al sistema" y prohibirlas en su lugar, que soy solo yo. Pero también simplifica la programación.

Lo que haría es implementar un filtro de expresiones regulares como este: /[\s]dooby (doo?)[\s]/i o si la palabra tiene el prefijo en otros, /[\s]doob(er|ed|est)[\s]/. Esto evitaría filtrar palabras como suavizado, que es perfectamente válido, pero también requeriría el conocimiento de las otras variantes y la actualización del filtro real si se aprende uno nuevo. Obviamente todos estos son ejemplos, pero tendrías para decidir cómo hacerlo usted mismo.

No estoy a punto de escribir todas las palabras que conozco, no cuando en realidad no quiero conocerlas.

 1
Author: Robert K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:25:28

No lo hagas. Solo lleva a problemas. Una experiencia personal de clbuttic que tengo con los filtros de profanidad es el tiempo en el que fui expulsado/expulsado de un canal de IRC por mencionar que estaba "dirigiéndome al puente de Hancock por un par de horas" o algo así.

 1
Author: Adam Jaskiewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 20:37:46

Estoy de acuerdo con la inutilidad del tema, pero si usted tiene que tener un filtro, echa un vistazo a Ning Boj :

Boxwood es una extensión de PHP para el reemplazo rápido de varias palabras en un fragmento de texto. Admite coincidencias entre mayúsculas y minúsculas. Requiere que el texto en el que opera esté codificado como UTF-8.

También ver esta entrada del blog para más detalles:

Con Boj, puede tener su lista de términos de búsqueda tan larga como desee the el algoritmo de búsqueda y reemplazo no se ralentiza con más palabras en la lista de palabras a buscar. Funciona mediante la construcción de un trie de todos los términos de búsqueda y luego escanea el texto del asunto una sola vez, caminando por los elementos del trie y comparándolos con los caracteres de su texto. Admite US-ASCII y UTF-8, coincidencia sensible a mayúsculas y minúsculas o insensible, y tiene algunas comprobaciones de límites de palabras centradas en inglés lógica.

 1
Author: Gordon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-30 09:01:18

Concluí, para crear un buen filtro de profanidad necesitamos 3 componentes principales, o al menos es lo que voy a hacer. Estos son:

  1. El filtro: un servicio en segundo plano que verifica contra una lista negra, diccionario o algo así.
  2. No permitir cuenta anónima
  3. Denunciar abuso

Un bono, será para recompensar de alguna manera a aquellos que contribuyen con reporteros de abuso precisos y castigar al infractor, por ejemplo, suspender sus cuentas.

 1
Author: Jaider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-22 14:27:16

No lo hagas.

Porque:

  • Clbuttic
  • Profanidad no es MAL OMG
  • La blasfemia no se puede definir efectivamente
  • La mayoría de las personas probablemente no aprecian ser "protegidos" de blasfemias

Editar: Aunque estoy de acuerdo con el comentarista que dijo que "la censura está mal", esa no es la naturaleza de esta respuesta.

 -1
Author: eyelidlessness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-16 03:20:11

Los filtros de blasfemia son una mala idea. La razón es que no puedes atrapar cada palabra grosera. Si lo intentas, obtienes falsos positivos.

Atrapando palabras

Digamos que quieres coger la palabra con F. Fácil, ¿verdad? Bueno, veamos.

Puedes hacer un bucle a través de una cadena para encontrar " fuck."Desafortunadamente, la gente engaña los filtros hoy en día. El filtro de blasfemia no recogió "fuk"."

Uno puede intentar comprobar si hay varias ortografías y variantes de la palabra, pero eso se ralentizará baja el rendimiento de tu código. Para atrapar la palabra con F, debes buscar "fuc", "Fuc", "fuk", "Fuk", " F***", etc. Y la lista sigue y sigue.

Evitar la inocencia

Bien, entonces, ¿qué tal hacerlo insensible a mayúsculas y minúsculas e ignorar espacios para que atrape "F u C k"? Eso puede sonar como una buena idea, pero alguien puede pasar por alto el filtro de blasfemia con "F. U. C. K."

Ignoras la puntuación.

Ahora que es un problema real, ya que una oración como "Infierno o, allí!" ser recoger como "infierno", y " Whculohasta?"recoge como" culo."

Y hay un montón de palabras que tienes que excluir del filtro, como "Constitution," porque hay "tit" en ella.

Las personas también pueden usar palabras sustitutas, como "Frack"."¿También bloqueas eso? ¿Qué hay de "pluma es "para " pene"? Su programa no tiene inteligencia artificial para saber si la cadena es buena o mala.

No uses filtros de blasfemia. Son difíciles de desarrollar, y son tan lentos como un rastreo.

 -2
Author: clickbait,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-21 19:52:25