Foros del Web » Programando para Internet » PHP »

Como se puede Mejorar este filtrador de malas palabras?

Estas en el tema de Como se puede Mejorar este filtrador de malas palabras? en el foro de PHP en Foros del Web. Hola que tal. Me preguntaba como se puede mejorar este código, solamente detecta palabras malas si estan entre espacios, por ej: " malapalabra ", el ...
  #1 (permalink)  
Antiguo 18/02/2004, 12:53
 
Fecha de Ingreso: noviembre-2003
Mensajes: 89
Antigüedad: 20 años, 5 meses
Puntos: 0
Pregunta Como se puede Mejorar este filtrador de malas palabras?

Hola que tal.
Me preguntaba como se puede mejorar este código, solamente detecta
palabras malas si estan entre espacios, por
ej: " malapalabra ", el PROBLEMA es si la PRIMERA palabra es una mala
palabra, o también si la ÚLTIMA palabra lo es, entonces NO
la detecta porque no tienen espacio a ambos lados. Digamos que son casos excepcionales. Si le quito el
espacio me cortaría palabras válidas que tuvieran una parte de una frase
que si se tomara por si sola sería una malapalabra.
Las malas palabras estan en DB.
Yo intentaba primero convertir todo el texto que viene de un
textarea a un array y separarlo en 3 partes:La primera palabra,
El cuerpo, y la última palabra.
Y a cada parte someterlo a sus respectivas pruebas modificando ligeramente
el codigo de abajo. Y después concatenar las 3
partes. Esa es la idea pero no se como llevarla a cabo, pienso que debe
haber otras formas mas sencillas pero no se las funciones necesarias.
Aqui va el código:

mysql_connect("localhost","my_user","my_pass") or die ("Error al conectar a la Bd");
$reemplazado=" ";
$result=mysql_db_query("my_base","select frase from palabras");
while($row=mysql_fetch_array($result))
{
$palabras2=$row["frase"];
$space=" ";
$palabras2=$space.$palabras2.$space;
$texto = eregi_replace("$palabras2", "$reemplazado", $texto);
}
echo $texto;

$texto tiene el mensaje que se introdujo a través de un
formulario, uso PHP 4.3.2
Gracias por la ayuda, Hasta Pronto.
  #2 (permalink)  
Antiguo 18/02/2004, 13:21
 
Fecha de Ingreso: noviembre-2003
Ubicación: Monterrey, MEXICO
Mensajes: 16
Antigüedad: 20 años, 4 meses
Puntos: 0
Esta es una FAQ. La respuesta rápida ? Te estas metiendo en un problema muy dificil de resolver. Por más que hagas te pondrán malas palabras.

Cómo saber que tu sistema funciona ? Para este problema necesitas unas pruebas de unidad. Lo que podrías hacer es crear un string enorme con todas las palabras y combinaciones de palabras que se te antojen y después pasarlas por tu función de filtrado. El resultado tendría que ser un string vació pues filtró todas las palabras.

He aqui un link a mi wiki donde explico un poco más el problema:

Qué tomar en cuenta para filtrar palabras prohibidas
__________________
www.edmz.org
  #3 (permalink)  
Antiguo 18/02/2004, 21:49
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 3 meses
Puntos: 0
Es interesante esto de hacer pruebas de unida. Dónde puedo encontrar docuentacion o ejemplos en php. Nos lo puedes comentar un poquito.

Gracias.
  #4 (permalink)  
Antiguo 19/02/2004, 16:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 89
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias por las respuestas y a edmz por el link.

Tienes razón edmz si alguien se lo propone pondra una mala palabra,
pero el objetivo es cada vez hacerlo sea más difícil, las nuevas malas palabras
iran a la DB y asi sucesivamente.

Me podrían decir de alguna funcion que extraiga la primera palabra de un conjunto de cadenas
Ej: "Hola que tal el dia" que extraiga "Hola".

Por otra parte la función array_shift extrae la primera palabra de un array
ahora como se puede convertir esa primera palabra otra vez a string
por ej: $primera = array_shift ($arraytexto);
como se puede convertir $primera a string he tratado de usar implode
pero me da error, estoy empezando con esto de las cadenas y los arrays
y ya me he mareado muchas veces.
Gracias por su ayuda. Hasta Pronto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:22.