elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Duda en Php como identificar un texto?
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda en Php como identificar un texto?  (Leído 6,822 veces)
free-articles

Desconectado Desconectado

Mensajes: 171


Ver Perfil WWW
Duda en Php como identificar un texto?
« en: 17 Febrero 2013, 02:41 am »

Imagina que tengo un formulario o una casilla donde el usuario pone su nombre.


Imagina que ese usuario no pone su nombbre sino que pone idiota.


Como puedo saber si el user escribe "idiota"? Mi intención es algo asi como
que si pone idiota en la casilla le salga un mensaje algo asi: Por favor no insulte, introdúzca su usuario..

Alguien sabe como hacerlo? Gracias


En línea

hola
free-articles

Desconectado Desconectado

Mensajes: 171


Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #1 en: 17 Febrero 2013, 02:44 am »

if { $user== "idiota" }

{ echo "ingrese user yno insulte", GRACIAS};




eso valdria? le quiero decir a php:

SI USUARIO CONTIENE INSULTO HAZ ESTO SINO LO OTRO

PERO TENGO UN PROBLEMA.. SI EL USUARIO ESCRIBE  EN LA CASILLA ALGO COMO:

ERES IDIOTA JJAJA


YA NO RECONOCERIA LA VARIABLE PORQUE
VA ENTRE PALABRAS.. ¿COMO IDENTIFICAR UNA PALABRA AUNQUE VAYA DENTRO
DE UNA FRASE?


« Última modificación: 17 Febrero 2013, 02:46 am por Ex_Tan€R » En línea

hola
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #2 en: 17 Febrero 2013, 07:43 am »

Para empezar, hacer un if por cada palabra es un tanto costoso.

Puedes tener un array lleno de palabras del tipo lista negra.

Código
  1. $lista_negra = array('idiota','jilipichi','tonto','eres gilipollas o peinas setas?');

Luego lo podrías comprobar con in_array();

Código
  1. if(in_array($user,$lista_negra)){
  2.   echo 'Menos insultos y mas peinar setas';
  3. }

Lo segundo que comentas ya se complica. Podrías utilizar funciones como stristr() que buscaran la palabra en un string..
Código
  1. if(stristr('idiota',$user)){
  2.  echo 'Menos insultos y mas peinar setas';
  3. }

El problema, es que si meto culo en la lista negra, con esa función, si pongo de usuario Crepusculo, la detectara como insulto. Ahí ya, tendrías que construir un regex que aisle las palabras entre espacios y otras cosas y se vuelve bastante complicado.

Por eso, la mayoría prefieren tener una lista negra cortita con cosas básicas y para lo demás poner el "Reportar usuario" para que se le pueda reportar en caso de un nick no adecuado.

Saludos
En línea

free-articles

Desconectado Desconectado

Mensajes: 171


Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #3 en: 17 Febrero 2013, 10:51 am »

Excelente

Citar
El problema, es que si meto culo en la lista negra, con esa función, si pongo de usuario Crepusculo, la detectara como insulto


Muy interesante porque seria más dificil jugármela
pero una pregunta,

Hay alguna manera de que aunque el tio ponga:

lo que sea idiota

Lo reconózca?


Si lo ves complicado se me ocurrre minimizar las posibilidades de que el usuariio
ponga palabras separadas por espacios..
pero igualmente si pone todo junto holaidiotatelacomes


Pues me la como..

Muchas gracias por tu ayuda
« Última modificación: 17 Febrero 2013, 10:54 am por Ex_Tan€R » En línea

hola
jdc


Desconectado Desconectado

Mensajes: 3.406


Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #4 en: 17 Febrero 2013, 11:48 am »

Toca usar la creatividad, por ejemplo no es lo mismo "insulto" que " insulto "
En línea

SCM

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Duda en Php como identificar un texto?
« Respuesta #5 en: 18 Febrero 2013, 21:02 pm »

Podrías meter en un array palabras que son un insulto aunque vayan junto a otras palabras, por ejemplo eresunidiota, idiota no es lo mismo que crepúsculo, que al final de una palabra forma otra verdaderamente.

Así que se me ocurre hacer un array para el primer tipo de insultos y recorrerlo usando stristr. Para palabras como culo, recorrer usando un explode que separe por espacios e identifique solamente la palabra malsonante.

Para evitar que use palabras como eresunculo se me acaba de ocurrir también otra cosa. Parsear un diccionario web en linea, como puede ser http://www.rae.es/rae.html
Si la palabra no existe, como es el caso de eresunculo, y stristr te devuelve que culo está en tu string de insultos, que deniegue la palabra, pues realmente no tiene ningún significado.. Y luego con un simple if que vea si la palabra es culo a secas y que la deniegue igualmente. Lo que pasa es que para parsear el diccionario, o bien haces muy bien el script, o se va a demorar un poco..

Un saludo.
« Última modificación: 18 Febrero 2013, 21:13 pm por SCM » En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #6 en: 18 Febrero 2013, 21:19 pm »

Parsear un diccionario esta bien.. el problema es que añade mucha carga y tiempo de ejecucion al script..

Por otro lado:
Porque crees que ningún foro "conocido" trae este tipo de filtros ? Simplemente no es rentable. Ya te digo, manten una lista negra básica (con lo mas común) y dale la posibilidad a otros a reportar el usuario.

Saludos
En línea

SCM

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Duda en Php como identificar un texto?
« Respuesta #7 en: 18 Febrero 2013, 21:27 pm »

Una pregunta sobre parsear, que serviría para este tema drvy. Si añades x puntos, por ejemplo, si la palabra empieza por C, no se podría hacer que solamente parsee una parte del diccionario, palabras que empiecen por C?

Me refiero:
Punto A -
Palabras por A
Punto B -
Palabras por B
Punto C -
Palabras por C
Punto D -
Palabras por D

Si la palabra empieza por C, ejecutarlo que lea el contenido entre el punto C y el punto D, obviando todo lo demás.
Esto es posible o la función tendría que parsear primero toda la web? Porque de ser así se le podrían aplicar ciertos filtros que haría el tiempo de respuesta mucho menor. Aunque no he practicado mucho en este tema, por lo que no sé si de todos modos eso tardaría también.

Saludos.
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #8 en: 18 Febrero 2013, 23:41 pm »

No la verdad es que no hace falta ir tan lejos. Puesto que un diccionario normalmente es una base de datos, solo hace falta hacer una búsqueda de la palabra exacta. Lo mismo pasa con la RAE, se puede hacer un script que busque la palabra y devuelva los resultados.

Código
  1. <?php
  2.  
  3. function buscar_rae($palabra=NULL){
  4.  if(empty($palabra)){return false;}
  5.  // Obtenemos la respuesta JSON de una API para la RAE.
  6.  $contenido = json_decode(utf8_encode(file_get_contents('http://rae-quel.appspot.com/json?query='.$palabra)));
  7.  // Si devuelve [] es que no ha encontrado la palabra.
  8.  if($contenido=='[]' || $contenido===false){return false;} else {return $contenido;}
  9. }
  10.  
  11. $palabra = 'idiota';
  12. $busqueda = buscar_rae($palabra);
  13.  
  14. if(!$busqueda){
  15.  echo 'La palabra no existe';
  16. } else {
  17.  echo 'La palabra existe';
  18.  echo '<br /><pre>';
  19.  print_r($busqueda);
  20. }
  21.  
  22. ?>

En este caso devolvería algo así:

Código
  1. La palabra existe
  2.  
  3. Array
  4. (
  5.    [0] => Que padece de idiocia.U. t. c. s.
  6.    [1] => Engreído sin fundamento para ello.U. t. c. s.
  7.    [2] => Tonto, corto de entendimiento.
  8.    [3] => Que carece de toda instrucción.
  9. )

El problema como ya he mencionado es que añade un tiempo de ejecución bastante alto... y no es viable en paginas de mucho trafico donde lo tienes que comprobar cada 2x3 (ej: Los usuarios nuevos en el mes enero de este foro han sido 2259)..



Edit: He estado jugando un poco xD
Código
  1. <?php
  2. function detectar_nick($nick=NULL,$lista=NULL,$rae=false){
  3. // Si el nick o la lista estan vacios o si lista no es array.. false.
  4. if(empty($nick) OR empty($lista) OR !is_array($lista)){return false;}
  5. $resultado = array(); // No lo tengas en cuenta.. es para el STRICT
  6. // Eliminar acentos.
  7. $acento = array('é'.'á','ó','ú','í','É','Á','Ó','Ú','Í');
  8. $nacento = array('e','a','o','u','i','E','A','O','U','I');
  9. $nick = strtolower(str_replace($acento,$nacento,$nick));
  10.  
  11. // Buscar en la RAE?
  12. if($rae!==false){
  13. $url = 'http://rae-quel.appspot.com/json?query='.urlencode($nick);
  14. // Si la palabra no existe, devolver false.. si existe devolver true.
  15. if(strlen(implode($contenido)) < 4|| $contenido===false){$resultado['rae']=false;}
  16. else {$resultado['rae']=true;}
  17. }
  18.  
  19.  
  20. // Por cada palabra en la lista negra.
  21. foreach($lista as $item){
  22. // Busqueda directa.
  23. if($item==$nick){$resultado['directo']=true;}else{$resultado['directo']=false;}
  24. // Plural Directo
  25. if($item.'s'==$nick){$resultado['directo_plural']=true;}else{$resultado['directo_plural']=false;}
  26. // Preciso con stristr
  27. if(stristr($nick,$item)){$resultado['precisa']=true;}else{$resultado['precisa']=false;}
  28. // Plural preciso
  29. if(stristr($nick,$item.'s')){$resultado['precisa_plural']=true;}else{$resultado['precisa_plural']=false;}
  30. // Separamos la palabra si contiene espacios.
  31. foreach(explode(' ',$nick) as $palabra){
  32. // Directo
  33. if($palabra==$item){$resultado['directo_separado']=true;}else{$resultado['directo_separado']=false;}
  34. // Plural
  35. if($palabra==$item.'s'){$resultado['directo_separado_plural']=true;}
  36. else{$resultado['directo_separado_plural']=false;}
  37. // Si coincide alguno, rompemos foreach
  38. if($resultado['directo_separado']===true || $resultado['directo_separado_plural']===true) {break;}
  39. }
  40.  
  41. // Si hay coincidencia con anteriores = romper foreach
  42. if($resultado['directo_plural']===true ||
  43.   $resultado['precisa']===true ||
  44.   $resultado['precisa_plural']===true ||
  45.   $resultado['directo_separado']===true ||
  46.   $resultado['directo_separado_plural']){
  47. break;
  48. }
  49. }
  50. // Devolver en forma de array.
  51. return $resultado;
  52. }
  53.  
  54.  
  55. $palabra = 'minombre';
  56. $lista_negra = array('idiota','puto','negro','lechuga con tomate','culo');
  57. $comprobacion = detectar_nick($palabra,$lista_negra,true);
  58.  
  59. foreach($comprobacion as $n=>$v){
  60. if($v===true){echo '<font color="red">'.$n.' DETECTADO</font><br />';}
  61. else{echo '<font color="green">'.$n.' LIMPIO</font><br />';}
  62. }
  63. ?>

5 ejemplos:

Idiota
rae DETECTADO
directo DETECTADO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado DETECTADO
directo_separado_plural LIMPIO

idiotas
rae DETECTADO
directo LIMPIO
directo_plural DETECTADO
precisa DETECTADO
precisa_plural DETECTADO
directo_separado LIMPIO
directo_separado_plural DETECTADO

crepusculo
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado LIMPIO
directo_separado_plural LIMPIO

soyputo
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado LIMPIO
directo_separado_plural LIMPIO

Soy un puto
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa DETECTADO
precisa_plural LIMPIO
directo_separado DETECTADO
directo_separado_plural LIMPIO

En base a TRUE o FALSE se puede sacar un porcentaje que en caso de que sea igual o mayor de por no valido el nick pero....
seguira fallando en muchos casos... y se puede evitar de muchas formas...

c_u_l_o:
rae LIMPIO
directo LIMPIO
directo_plural LIMPIO
precisa LIMPIO
precisa_plural LIMPIO
directo_separado LIMPIO
directo_separado_plural LIMPIO

Saludos
« Última modificación: 19 Febrero 2013, 01:59 am por drvy | BSM » En línea

free-articles

Desconectado Desconectado

Mensajes: 171


Ver Perfil WWW
Re: Duda en Php como identificar un texto?
« Respuesta #9 en: 23 Febrero 2013, 18:04 pm »

Buenisimos, gracias.

Si alguien le sobra tiempo y ganas me gustaria aprender php
con alguien que tenga al lado,  y puedo exponer mis dudas
ipso facto y ser respondido, es lo que me falta, .aunque sea por messenger.

Nota: Algo sé  pero no paso de variables, if, else y poco más

Como pago yo puedo enseñarle a ganar dinero con marketing.
« Última modificación: 23 Febrero 2013, 18:07 pm por free-articles » En línea

hola
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como identificar el lenguaje
Ingeniería Inversa
ornitorrinco 3 2,666 Último mensaje 10 Septiembre 2005, 17:34 pm
por tena
Identificar una cadena de texto en un archivo. « 1 2 »
Programación Visual Basic
Impersecuto 10 3,959 Último mensaje 26 Julio 2007, 00:36 am
por Tengu
duda como posicionar texto? « 1 2 »
Programación Visual Basic
Sai-To 15 6,305 Último mensaje 23 Mayo 2008, 01:49 am
por byebye
Identificar texto dentro de otro
Programación C/C++
deividmor 1 1,747 Último mensaje 19 Febrero 2017, 23:58 pm
por ivancea96
Como identificar una IP « 1 2 »
Seguridad
mz39720 13 8,544 Último mensaje 9 Septiembre 2020, 01:52 am
por elliotmadness
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines