| 
	
		|  Autor | Tema: Duda en Php como identificar un texto?  (Leído 7,370 veces) |  
	| 
			| 
					
						| free-articles | 
 
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 | 
 
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 | 
 
Para empezar, hacer un if por cada palabra es un tanto costoso. Puedes tener un array lleno de palabras del tipo lista negra. $lista_negra = array('idiota','jilipichi','tonto','eres gilipollas o peinas setas?');
 Luego lo podrías comprobar con in_array();    echo 'Menos insultos y mas peinar setas';}
 Lo segundo que comentas ya se complica. Podrías utilizar funciones como stristr() que buscaran la palabra en un string..   echo 'Menos insultos y mas peinar setas';}
 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 | 
 
Excelente  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 | 
 
Toca usar la creatividad, por ejemplo no es lo mismo "insulto" que " insulto " |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| SCM 
								
								 Desconectado 
								Mensajes: 17
								
								
								
								
								
								   | 
 
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 | 
 
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 
								Mensajes: 17
								
								
								
								
								
								   | 
 
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 | 
 
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. <?php function buscar_rae($palabra=NULL){  if(empty($palabra)){return false;}  // Obtenemos la respuesta JSON de una API para la RAE.  // Si devuelve [] es que no ha encontrado la palabra.  if($contenido=='[]' || $contenido===false){return false;} else {return $contenido;}} $palabra = 'idiota';$busqueda = buscar_rae($palabra); if(!$busqueda){  echo 'La palabra no existe';} else {  echo 'La palabra existe';  echo '<br /><pre>';} ?>
 En este caso devolvería algo así: La palabra existe Array(    [0] => Que padece de idiocia.U. t. c. s.    [1] => EngreÃdo sin fundamento para ello.U. t. c. s.    [2] => Tonto, corto de entendimiento.    [3] => Que carece de toda instrucción.)
 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 <?phpfunction detectar_nick($nick=NULL,$lista=NULL,$rae=false){	// Si el nick o la lista estan vacios o si lista no es array.. false.	$resultado = array(); // No lo tengas en cuenta.. es para el STRICT	// Eliminar acentos.	$acento = array('é'.'á','ó','ú','í','É','Á','Ó','Ú','Í');	$nacento = array('e','a','o','u','i','E','A','O','U','I'); 	// Buscar en la RAE?	if($rae!==false){		$url = 'http://rae-quel.appspot.com/json?query='.urlencode($nick);		// Si la palabra no existe, devolver false.. si existe devolver true.		if(strlen(implode($contenido)) < 4|| $contenido===false){$resultado['rae']=false;}		else {$resultado['rae']=true;}	}  	// Por cada palabra en la lista negra.	foreach($lista as $item){		// Busqueda directa.		if($item==$nick){$resultado['directo']=true;}else{$resultado['directo']=false;}		// Plural Directo		if($item.'s'==$nick){$resultado['directo_plural']=true;}else{$resultado['directo_plural']=false;}		// Preciso con stristr		if(stristr($nick,$item)){$resultado['precisa']=true;}else{$resultado['precisa']=false;}		// Plural preciso		if(stristr($nick,$item.'s')){$resultado['precisa_plural']=true;}else{$resultado['precisa_plural']=false;}		// Separamos la palabra si contiene espacios.		foreach(explode(' ',$nick) as $palabra){			// Directo			if($palabra==$item){$resultado['directo_separado']=true;}else{$resultado['directo_separado']=false;}			// Plural			if($palabra==$item.'s'){$resultado['directo_separado_plural']=true;}			else{$resultado['directo_separado_plural']=false;}			// Si coincide alguno, rompemos foreach			if($resultado['directo_separado']===true || $resultado['directo_separado_plural']===true) {break;}		} 		// Si hay coincidencia con anteriores = romper foreach		if($resultado['directo_plural']===true ||		   $resultado['precisa']===true ||		   $resultado['precisa_plural']===true ||		   $resultado['directo_separado']===true ||		   $resultado['directo_separado_plural']){			break;		}	}	// Devolver en forma de array.	return $resultado;}  $palabra = 'minombre';$lista_negra = array('idiota','puto','negro','lechuga con tomate','culo');$comprobacion = detectar_nick($palabra,$lista_negra,true); foreach($comprobacion as $n=>$v){	if($v===true){echo '<font color="red">'.$n.' DETECTADO</font><br />';}	else{echo '<font color="green">'.$n.' LIMPIO</font><br />';}}?>
 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 LIMPIOdirecto LIMPIOdirecto_plural LIMPIOprecisa LIMPIOprecisa_plural LIMPIOdirecto_separado LIMPIOdirecto_separado_plural LIMPIO Saludos |  
						| 
								|  |  
								| « Última modificación: 19 Febrero 2013, 01:59 am por drvy | BSM » |  En línea | 
 
 |  |  |  | 
			| 
					
						| free-articles | 
 
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 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | como identificar el lenguaje Ingeniería Inversa
 | ornitorrinco | 3 | 3,041 |  10 Septiembre 2005, 17:34 pm por tena
 |  
						|   |   | Identificar una cadena de texto en un archivo.
							« 1 2 » Programación Visual Basic
 | Impersecuto | 10 | 4,501 |  26 Julio 2007, 00:36 am por Tengu
 |  
						|   |   | duda como posicionar texto?
							« 1 2 » Programación Visual Basic
 | Sai-To | 15 | 7,112 |  23 Mayo 2008, 01:49 am por byebye
 |  
						|   |   | Identificar texto dentro de otro Programación C/C++
 | deividmor | 1 | 2,031 |  19 Febrero 2017, 23:58 pm por ivancea96
 |  
						|   |   | Como identificar una IP
							« 1 2 » Seguridad
 | mz39720 | 13 | 9,765 |  9 Septiembre 2020, 01:52 am por elliotmadness
 |    |