Comparar cadenas sin importar mayúsculas ni acentos

Tengo una pequeña aplicación php que compara si lo que ha introducido el usuario es igual a una cadena. Pero me estoy rompiendo la cabeza...

La FAQ Comparar cadenas sin importar mayúsculas ni acentos tiene

Pertenece a la categoría:

Pregunta
Tengo una pequeña aplicación php que compara si lo que ha introducido el usuario es igual a una cadena.



Pero me estoy rompiendo la cabeza por un código que haga modificaciones a la cadena canción (cancion, Canción, Canción, CANCION, CANCIÓN) y lo vaya comparando lo que ha introducido el usuario.


Respuesta de Pïno
Lo que podrías hacer es sacar todos los acentos de la cadena de la base de datos y de la que introduzco el usuario



Así:



$msg = ereg_replace("ó|Ó", "o", $msg);


Entonces ya no tienes problemas con los acentos



Ahora hay que pasar todo a minúscula, te parece?


$msg = strtolower ($msg);




con las 2 cadenas en minúsculas y sin acentos no creo que tengas problemas para comprar.




Para pasar todo a mayúsculas es "strtoupper".


Por ej.


$cadena = strtoupper ($cadena);


Complementar la respuestaComplementar la respuesta
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios
Fueron enviados 5 comentarios a la faq
2 comentarios no revisados
3 comentarios revisados:
Por: MTI. Tomás Fernando Martínez
09/7/03
Para asp también es muy sencillo sólo tienes que poner el siguiente codigo: ademas de comparar cadenas minusculas o mayusculas, o con acentos o sin ellos, también checa o quita los espacios en blanco de la izquierda y la derecha.
Vamos a suponer que tienes cadena1 y cadena2:

       cadena1=ucase(cadena1)
             cadena2=ucase(cadena2)
             cadena1=trim(cadena1)
             cadena2=trim(cadena2)
             cadena1=replace(cadena1,"Á","A")
             cadena1=replace(cadena1,"É","E")
             cadena1=replace(cadena1,"Í","I")
             cadena1=replace(cadena1,"Ó","O")
             cadena1=replace(cadena1,"Ú","U")
             cadena2=replace(cadena2,"Á","A")
             cadena2=replace(cadena2,"É","E")
             cadena2=replace(cadena2,"Í","I")
             cadena2=replace(cadena2,"Ó","O")
             cadena2=replace(cadena2,"Ú","U")

Al final haces la comparació de cadena1 y cadena2. p/e

if cadena1 = cadena2 then
....
end if

Ojala sea de su ayuda. Saludos.
Por: luis
06/4/05
Esto tiene un problema, si buscas la palábra álvaro, no la encuentra ya que reemplaza todas las aes, por a o por Á
Por: Carlos Devia
16/6/06
Aqui esta un ejemplo del codigo sql para reemplazar tildes y el caracter ñ.

SELECT * FROM content WHERE REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE ( LOWER(title),'á','a'), 'é','e'),'í','i'),'ó','o'),'ú','u'),'ñ','n') = 'titulo';

Tambien se puede usar la funcion soundex http://dev.mysql.com/doc/refman/5.0/en/string-functions.html aunque la consulta anterior fue suficiente para mi.
--
Carlos Devia
http://www.imaginacolombia.com

Volver al árbol de categoríasVolver al árbol de categorías
Alojados en el grupo