Foros del Web » Programando para Internet » PHP »

buscador con tildes

Estas en el tema de buscador con tildes en el foro de PHP en Foros del Web. hola me encuentro con el sigueinte problema: el usuario al guardar palabras como fenómeno al buscarlas depues como fenomeno no encuentra resultados como prodira solvertar ...
  #1 (permalink)  
Antiguo 07/11/2005, 12:27
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
buscador con tildes

hola me encuentro con el sigueinte problema:

el usuario al guardar palabras como fenómeno al buscarlas depues como fenomeno no encuentra resultados

como prodira solvertar esto es decir que encuentre fenomeno tanto con tilde como si ella si el usuario en la busqueda pone fenomeno o fenómeno

gracias

Un Saludo
  #2 (permalink)  
Antiguo 07/11/2005, 12:32
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
puedes hacer una tabla de sustituciones y guardar la misma palabra con tilde y sin tilde, y hacer la búsqueda sobre las 2 versiones. Vinculadas a lo mismo, haces que den los mismos resultados.


Saludos.
  #3 (permalink)  
Antiguo 07/11/2005, 14:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Puedes hacer busquedas "binarias" definiendo tu campo como "BINARY" así podrás buscar en tus BD distinguiendo entre mayusculas y minusculas o caracteres con acento o dieresis y demás ..

Un saludo,

PD: suponemos que usas Mysql?
  #4 (permalink)  
Antiguo 07/11/2005, 14:47
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Usando like desde sql estarías resolviendolo. Ahora, si queres hacerlo de manera mas funcional, usa los FULLTEXT MATCH, así te daría los resultados con relevancias.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 08/11/2005, 03:42
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
pero el problema que tengo es que el campo se guarda por un editor WYSIWYG para ser mas exactos el fckeditor y por ejemplo la palabra fenómeno la guarda en la bd como fenómeno eso lo resuelvo hacinedo un htmlentities a la variable es decir si buscan fenómeno yo lo cambio por fenómeno y hago la busqueda y resulta el problema es alreves si buscan fenemeno no encuentra nada proq ue en la bd esta guardado como fenómeno
y yo lo hago actualmente con like '%$var%' pero pro fenomeno no me encuentra los resultados de fenómeno..
claro otro problema seria elq ue buscara fenomeno y lo que sea, joer que lio
la verdad es que necesito ayuda proque ando perdido

Pd: si es con mysql
Un Saludo y muchas gracias
  #6 (permalink)  
Antiguo 08/11/2005, 04:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues entonces haz busquedas tipo:
Código PHP:
$sql="SELECT * FROM tabla WHERE campo_a_buscar LIKE '%".htmlentities($cadena_a_buscar)."%' OR campo_a_buscar LIKE '%".$cadena_a_buscar."%'"
Es decir .. buscas sobre el mismo campo tu cadena a buscar aplicando htmlentities y sin aplicaro ..gracias al "OR" .. te dará cualquier resultado que se encuentre al respecto.

Un saludo,
  #7 (permalink)  
Antiguo 08/11/2005, 06:22
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
es que asi lo hago cluster, pero no funciona puesto que eso servira para buscar en al db fenómeno o fenómeno pero no con tilde o sin tilde

Un Saludo Gracias por su tiempo
  #8 (permalink)  
Antiguo 08/11/2005, 06:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. vamos a ver .. en tu campo a buscar que almacenas exactamente cuando hay acento (tilde) o no?

No entiendo que quieres hacer .. pero es cosa de que ajustes tu sentencia SQL .. o usas un OR .. o no lo usas.

Un saludo,
  #9 (permalink)  
Antiguo 08/11/2005, 07:18
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Como dijo cluster, usando el or, debería funcionar....claro, siempre y cuando tengas " fenómeno , fenomeno o fenómeno ", si tiene otra cosa, deberás como también diche Cluster, adaptar el query.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 08/11/2005, 09:58
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
en la bd se pueden guardar las tres formas
fenómeno
fenomeno
fenómeno
pero no tiene pro que ser de una tenerminada forma entonces la sentencia que uso exactamente es :
"SELECT * FROM pag where texto like '%".$vardecode."%' or texto like '%".$var."%' order by id DESC";
donde vardecode en la cadena pero con htmlentities y la var es exactamente como viene del buscador

que es lo quiero pues que al buscar pro ejemplo fenómeno me lo busque en las tres formas que puede ser es decir fenómeno fenomeno fenómeno

se entendio¿?

un saludo y perdon por ser tan torpe en mis explicaciones
  #11 (permalink)  
Antiguo 08/11/2005, 10:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y .. no te funciona?

Por qué LIKE sin campos tipo "BINARY" (revisalo) .. no distingue entre un fenómeno o fenomeno .. es decir, busques con tilde o no .. tu consulta SQL te arrojará esas ocurrencias .. Si además dices que podría estar como entidad HTML .. ya usas el htmlentities()

Un saludo,
  #12 (permalink)  
Antiguo 08/11/2005, 10:32
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
el campo es un tipo text y pro lo cual no puede ser binary no?¿

y no funciona

Un Saludo
  #13 (permalink)  
Antiguo 08/11/2005, 10:46
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
me acabo de dar cuenta de la siguiente, perdon ....

si busco fenomeno o fenómeno y en la bd estan guardados asi, si me los encuentra el problema viene al buscar fenomeno y en la db esta guardado como fenómeno ya que el original y con htmlentities es fenomeno...

ahora si que no se como hacerlo jajajaja

Un Saludo
  #14 (permalink)  
Antiguo 08/11/2005, 11:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por DINASEN
el campo es un tipo text y pro lo cual no puede ser binary no?¿

y no funciona

Un Saludo
La propiedad "BINARY" .. aunque te suene a otra cosa es una "propiedad" de un campo (y de texto: VARCHAR, CHAR, TEXT, etc ...), .. es como un "UNSIGNED" .. otra propiedad más .. (que afecta a los campos de tipo numérico en ese caso).

Un saludo,
  #15 (permalink)  
Antiguo 08/11/2005, 11:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por DINASEN
me acabo de dar cuenta de la siguiente, perdon ....

si busco fenomeno o fenómeno y en la bd estan guardados asi, si me los encuentra el problema viene al buscar fenomeno y en la db esta guardado como fenómeno ya que el original y con htmlentities es fenomeno...

ahora si que no se como hacerlo jajajaja

Un Saludo
Ahí cambia la cosa .. y se complica en extremo ...

tendrías que "pre-convertir" esas entidades HTML en ascii común y de ahí buscar .. como? .. no sé ..

Lo que es en el manual oficial de PHP sobre htmlentities() hay funciones para hacer lo contrario .. pero no sé a simple vista como acoplarlo a tu sistema ..

Un saludo,
  #16 (permalink)  
Antiguo 08/11/2005, 11:52
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Tal cuál, deberás normalizar esos datos...
Intentaste como te dije usando MATCH en vez de like? (www.mysql.com)...creo (no estoy seguro) que te da una relevancia minima en tu caso.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #17 (permalink)  
Antiguo 09/11/2005, 03:46
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
pues visto lo visto loq ue voy a hacer es usar el FULLTEXT MATCH para la busqueda y antes de guardar o actualizar los campos pues hare un html_entity_decode, pero me surge una duda...

como hago una modificacion masiva de lo que ya tengo guardado?, probe algo como :
Código PHP:
$db_conexionmysql_connect("localhost""""") or die("No se pudo conectar a la Base de datos") or die(mysql_error());
mysql_select_db("tabla") or die(mysql_error());
$cont=0;
$consulta mysql_query("SELECT * FROM tabla") or die("No se pudo realizar la consulta a la Base de datos");
while(
$resultados mysql_fetch_array($consulta)) {
        
$newtexto html_entity_decode($resultados['texto']);
        
$newtexto2 html_entity_decode($resultados['texto2']);
        
$id=$resultados['id'];
        
mysql_query("UPDATE $tabla SET texto='$newtexto',texto2='$newtexto2' WHERE id='$id'") or die(mysql_error());
$cont++;

}
echo 
"modificado : ".$cont." registros"
pero me da este error
Código PHP:
You have an error in your SQL syntaxCheck the manual that corresponds to your MySQL server version for the right syntax to use near s num contexto de Globalização Económica", Porto, 15 de Outubro 
como puedo solucionarlo?
Tambien he visto en un manual que cuando es solo la busqueda de una palabra es mejor usar el like y el match para mas de una palabra es esto verdad o puedo usar el match para todas las busquedas?

Gracias

Un Saludo

Última edición por DINASEN; 09/11/2005 a las 03:51
  #18 (permalink)  
Antiguo 09/11/2005, 08:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El problema lo tienes por los datos que usas que contienen comillas .. para solventar el problema usa:

mysql_real_escape_String()
http://www.php.net/manual/es/functio...ape-string.php
(revisa los ejemplos y documentación oficial) ..

Cita:
Tambien he visto en un manual que cuando es solo la busqueda de una palabra es mejor usar el like y el match para mas de una palabra es esto verdad o puedo usar el match para todas las busquedas?

Así es .. Con Like podrías busacar hasta un sólo caracter en un campo .. con las busquedas FULL text search ("MATCH" y demás) hay limites (creo que 3 o cuatro caracteres mínimo para las busquedas por palabras ..). En definitiva va mejor para buscar N palabras en uno o vários campos simultáneamente.

Un saludo,
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 09:50.