Discussion:
[OT-PHP] Censor de malas palabras (groserias)
(demasiado antiguo para responder)
Daniel Naranjo
2007-11-08 01:48:34 UTC
Permalink
Hola a todos...

Actualmente tengo implementado un censor de malas palabras o groserias (www.garrettsites.net/OLD/index.php) en una web, pero este script esta censurando palabras que no estan en la lista de "groserias".

Este script creado por Garrett usa funciones: preg_split(), str_replace(), y preg_replace(), pero me esta tomando palabras por aproximación, por ejemplo: "Gaby" la censura porque se parece a "Gay"

Alguna idea, comentarios, script?

Saludos

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online
Lucas Sevilla
2007-11-08 07:12:48 UTC
Permalink
¿Por qué usas preg_split? Según tengo entendido:

preg_split se utiliza normalmente para separar caracteres y/o palabras, pongo la definición exacta no me suelo explicar con claridad:

array preg_split ( string patron, string asunto [, int limite [, int banderas]] )

Devuelve una matriz que contiene sub-cadenas de asunto, separadas sobre ciertos límites coincidentes con patron.

Si se especifica limite, entonces sólo se devuelve una cantidad de hasta limite sub-cadenas, y si limite es -1, quiere decir "sin límite", lo cual es útil cuando se quiere pasar un valor al parámetro banderas.

banderas puede ser cualquier combinación de las siguientes banderas (combinadas con el operador de bits |):


PREG_SPLIT_NO_EMPTY
Si esta bandera es definida, preg_split() sólo devolverá segmentos no-vacíos.

PREG_SPLIT_DELIM_CAPTURE
Si se define esta bandera, las expresiones entre paréntesis en el patrón de delimitación serán capturadas y devueltas también. Esta bandera fue agregada en 4.0.5.

PREG_SPLIT_OFFSET_CAPTURE

Si se define esta bandera, para cada coincidencia encontrada, se devolverá también la posición de la cadena anexa. Note que esto modifica el valor de retorno a una matriz en donde cada elemento es una matriz consistente de la cadena coincidente en la posición 0 y su desplazamiento de cadena al interior de asunto en la posición 1. Esta bandera está disponible desde PHP 4.3.0.


Ejemplos


<?php
// separar la frase por cualquier numero de comas o caracteres de espacio,
// incluyendo " ", \r, \t, \n y \f
$palabras_clave = preg_split("/[\s,]+/", "lenguaje hipertexto, programacion");
?>


<?php
//separar una cadena por sus caracteres
$cadena = 'cadena';
$caracteres = preg_split('//', $cadena, -1, PREG_SPLIT_NO_EMPTY);
print_r($caracteres);
?>

La función preg_replace() es más lenta que str_replace(), que a su vez es más lenta que strtr(), con lo que siempre que podamos usaremos strtr() para optimizar nuestras substituciones en cadenas.
Daniel Naranjo
2007-11-08 15:01:07 UTC
Permalink
Hermano gracias por darme luces... te adjunto la función completa..

<?php
function censor($valor){
$content=$valor;
//If you want to use the censor, make a file called censorwords.txt ,
//and put each word you want censored on a new line. Be sure there are no
//blank lines at the bottom of the file, as that may turn into disaster!
//Written by Garrett P. www.garrettsites.net

$words_list=@file('malas.txt');
$search=array('a','b','i','l','o','p','s');
$replace=array('(?:a|\@)','(?:b|8|3)','(?:i|1|l|\!)','(?:l|1|i|\!)','(?:o|0)','(?:p|\?)','(?:s|\$)');
foreach($words_list as $badword){
$badword=rtrim($badword);
/*
// Originalmente, cambiaba lo censurada por guoines, por ejemplo: articulos por arti----s
$len=strlen($badword);
$rep='';
for($i=0; $i < $len; $i++){
$rep.='-';
}
*/
// preg_split("/[\s,]+/", "lenguaje hipertexto, programacion");
$badwordpreg=preg_split("/[\s,]+/", $badword, -1, PREG_SPLIT_NO_EMPTY);
// $badwordpreg=preg_split('//', $badword, -1, PREG_SPLIT_NO_EMPTY);
$badwordpreg=str_replace($search, $replace, $badwordpreg);
$badword='';
for($i=0; $i < count($badwordpreg); $i++){
$badword.=$badwordpreg[$i];
if($i != (count($badwordpreg)-1)) $badword.='(.?)';
}
$badword="/$badword/i";

// Ahora cambio lo censurado por una nota de censura...
$rep="<font color=FF0000><strong>[[CENSURADO]]</strong></font>";
//$content=eregi_replace($badword, $rep, $content);
$content=preg_replace($badword, $rep, $content);
}
$valor=$content;
return $valor;
}
?>

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online


"Lucas Sevilla" <***@gmail.com> escribió en el mensaje news:fgucta$4h6$***@forums.macromedia.com...
¿Por qué usas preg_split? Según tengo entendido:

preg_split se utiliza normalmente para separar caracteres y/o palabras, pongo la definición exacta no me suelo explicar con claridad:

array preg_split ( string patron, string asunto [, int limite [, int banderas]] )

Devuelve una matriz que contiene sub-cadenas de asunto, separadas sobre ciertos límites coincidentes con patron.

Si se especifica limite, entonces sólo se devuelve una cantidad de hasta limite sub-cadenas, y si limite es -1, quiere decir "sin límite", lo cual es útil cuando se quiere pasar un valor al parámetro banderas.

banderas puede ser cualquier combinación de las siguientes banderas (combinadas con el operador de bits |):


PREG_SPLIT_NO_EMPTY
Si esta bandera es definida, preg_split() sólo devolverá segmentos no-vacíos.

PREG_SPLIT_DELIM_CAPTURE
Si se define esta bandera, las expresiones entre paréntesis en el patrón de delimitación serán capturadas y devueltas también. Esta bandera fue agregada en 4.0.5.

PREG_SPLIT_OFFSET_CAPTURE
Si se define esta bandera, para cada coincidencia encontrada, se devolverá también la posición de la cadena anexa. Note que esto modifica el valor de retorno a una matriz en donde cada elemento es una matriz consistente de la cadena coincidente en la posición 0 y su desplazamiento de cadena al interior de asunto en la posición 1. Esta bandera está disponible desde PHP 4.3.0.

Ejemplos

<?php
// separar la frase por cualquier numero de comas o caracteres de espacio,
// incluyendo " ", \r, \t, \n y \f
$palabras_clave = preg_split("/[\s,]+/", "lenguaje hipertexto, programacion");
?>

<?php
//separar una cadena por sus caracteres
$cadena = 'cadena';
$caracteres = preg_split('//', $cadena, -1, PREG_SPLIT_NO_EMPTY);
print_r($caracteres);
?>

La función preg_replace() es más lenta que str_replace(), que a su vez es más lenta que strtr(), con lo que siempre que podamos usaremos strtr() para optimizar nuestras substituciones en cadenas.
Lucas Sevilla
2007-11-08 15:37:56 UTC
Permalink
De nada Dani, por cierto dime tu weblog (no empresa) para añadirte a la lista de amiguetes. toy rehaciendo el mío.

Un saludo
Daniel Naranjo
2007-11-08 15:48:57 UTC
Permalink
Sigo en la lucha con el censor..

Actualmente tambien estamos dandole un nuevo aire a la web, acabamos de lanzar parte de ella... www.loultimoenlaWEB.com y www.loultimoenVIAJES.com este es una unidad de negocios jejejeje

Saludos

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online


"Lucas Sevilla" <***@gmail.com> escribió en el mensaje news:fgvagd$dlg$***@forums.macromedia.com...
De nada Dani, por cierto dime tu weblog (no empresa) para añadirte a la lista de amiguetes. toy rehaciendo el mío.

Un saludo
Lucas Sevilla
2007-11-08 16:34:57 UTC
Permalink
oks gracias ¿no era estudio naranja o algo asi, aunque creo que ese es juan... ? menos mal que andamos ya a jueves .. xD
"Daniel Naranjo" <***@loultimoenlaweb.com> escribió en el mensaje news:fgvb8o$eil$***@forums.macromedia.com...
Sigo en la lucha con el censor..

Actualmente tambien estamos dandole un nuevo aire a la web, acabamos de lanzar parte de ella... www.loultimoenlaWEB.com y www.loultimoenVIAJES.com este es una unidad de negocios jejejeje

Saludos

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online


"Lucas Sevilla" <***@gmail.com> escribió en el mensaje news:fgvagd$dlg$***@forums.macromedia.com...
De nada Dani, por cierto dime tu weblog (no empresa) para añadirte a la lista de amiguetes. toy rehaciendo el mío.

Un saludo
Juan Muro
2007-11-09 17:14:41 UTC
Permalink
Si por juan te refieres a mí, pues no, no soy yo quien está detrás de www.estudionaranja.com, es nuestro colega Andres Felipe Naranjo.
Salu2
`8¬]
Juan Muro
"Lucas Sevilla" <***@gmail.com> escribió en el mensaje de noticias news:fgvdrb$hvr$***@forums.macromedia.com...
oks gracias ¿no era estudio naranja o algo asi, aunque creo que ese es juan... ? menos mal que andamos ya a jueves .. xD
Lucas Sevilla
2007-11-12 06:57:50 UTC
Permalink
jeje si juan jjj tu llevas la web esa de flassh o como se escriba... ya se sabe finales de semana y las neuronas van como van
"Juan Muro" <***@gmail.com> escribió en el mensaje news:fh24i1$9ds$***@forums.macromedia.com...
Si por juan te refieres a mí, pues no, no soy yo quien está detrás de www.estudionaranja.com, es nuestro colega Andres Felipe Naranjo.
Salu2
`8¬]
Juan Muro
"Lucas Sevilla" <***@gmail.com> escribió en el mensaje de noticias news:fgvdrb$hvr$***@forums.macromedia.com...
oks gracias ¿no era estudio naranja o algo asi, aunque creo que ese es juan... ? menos mal que andamos ya a jueves .. xD
YaC
2007-11-09 14:50:52 UTC
Permalink
"Centro de Reservaciones Online" ????
No sería "Reservas"?

YaC

"Daniel Naranjo" <***@loultimoenlaweb.com> escribió en el mensaje news:fgvb8o$eil$***@forums.macromedia.com...
Sigo en la lucha con el censor..

Actualmente tambien estamos dandole un nuevo aire a la web, acabamos de lanzar parte de ella... www.loultimoenlaWEB.com y www.loultimoenVIAJES.com este es una unidad de negocios jejejeje

Saludos

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online


"Lucas Sevilla" <***@gmail.com> escribió en el mensaje news:fgvagd$dlg$***@forums.macromedia.com...
De nada Dani, por cierto dime tu weblog (no empresa) para añadirte a la lista de amiguetes. toy rehaciendo el mío.

Un saludo
Daniel Naranjo
2007-11-09 15:22:46 UTC
Permalink
Gracias por la acotación..

Salu2

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online


"YaC" <***@ESTOFUERAikomma.com> escribió en el mensaje news:fh1s45$rsj$***@forums.macromedia.com...
"Centro de Reservaciones Online" ????
No sería "Reservas"?

YaC

"Daniel Naranjo" <***@loultimoenlaweb.com> escribió en el mensaje news:fgvb8o$eil$***@forums.macromedia.com...
Sigo en la lucha con el censor..

Actualmente tambien estamos dandole un nuevo aire a la web, acabamos de lanzar parte de ella... www.loultimoenlaWEB.com y www.loultimoenVIAJES.com este es una unidad de negocios jejejeje

Saludos

Daniel Naranjo
Lo Ultimo Group, C.A.
(+58) 414 7962406 / 416 2917532 / 295 6117632
Diseño y Desarrollo Web, Aplicaciones Web.
Registro de dominios y Hospedaje Web al mejor costo.
Centro de Reservaciones Online


"Lucas Sevilla" <***@gmail.com> escribió en el mensaje news:fgvagd$dlg$***@forums.macromedia.com...
De nada Dani, por cierto dime tu weblog (no empresa) para añadirte a la lista de amiguetes. toy rehaciendo el mío.

Un saludo
Loading...