Cuando trabajamos con cadenas de texto en ocasiones resulta útil quitar acentos, tildes y otros símbolos por diversos motivos.
En PHP disponemos de la función str_replace que reemplaza un string por otro, la sintaxis es la siguiente:
str_replace(search, replace, subject, count); /* search: El valor a ser buscado. replace: El valor de reemplazo que sustituye los valores encontrados de search. Un array puede ser utilizado para designar reemplazos múltiples. subject: El string o array sobre el que se busca y se sustituye. count: Si es pasado, con este se establece el número de reemplazos realizados. *Documentación oficial PHP www.php.net */
Teniendo en cuenta esto realizaremos una función que permita reemplazar acentos, tildes y otros caracteres de una cadena.
function eliminar_acentos($cadena){ //Reemplazamos la A y a $cadena = str_replace( array('Á', 'À', 'Â', 'Ä', 'á', 'à', 'ä', 'â', 'ª'), array('A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a'), $cadena ); //Reemplazamos la E y e $cadena = str_replace( array('É', 'È', 'Ê', 'Ë', 'é', 'è', 'ë', 'ê'), array('E', 'E', 'E', 'E', 'e', 'e', 'e', 'e'), $cadena ); //Reemplazamos la I y i $cadena = str_replace( array('Í', 'Ì', 'Ï', 'Î', 'í', 'ì', 'ï', 'î'), array('I', 'I', 'I', 'I', 'i', 'i', 'i', 'i'), $cadena ); //Reemplazamos la O y o $cadena = str_replace( array('Ó', 'Ò', 'Ö', 'Ô', 'ó', 'ò', 'ö', 'ô'), array('O', 'O', 'O', 'O', 'o', 'o', 'o', 'o'), $cadena ); //Reemplazamos la U y u $cadena = str_replace( array('Ú', 'Ù', 'Û', 'Ü', 'ú', 'ù', 'ü', 'û'), array('U', 'U', 'U', 'U', 'u', 'u', 'u', 'u'), $cadena ); //Reemplazamos la N, n, C y c $cadena = str_replace( array('Ñ', 'ñ', 'Ç', 'ç'), array('N', 'n', 'C', 'c'), $cadena ); return $cadena; }
Veamos un ejemplo utilizando la función creada para reemplazar los acentos de algunas palabras:
$cadena = "Árbol lápiz Élite Félix Índice mí Órbita natación Único algún Ñoño"; echo 'Original: ' . $cadena; echo 'Reemplazo: ' . eliminar_acentos($cadena);
Resultado
Original: Árbol lápiz Élite Félix Índice mí Órbita natación Único algún Ñoño Reemplazo: Arbol lapiz Elite Felix Indice mi Orbita natacion Unico algun Nono
Consejos:
Dependiendo del tipo de codificación que utilicemos puede no reemplazar los caracteres y regresar caracteres aun mas extraños:
Original: �rbol l�piz �lite F�lix �ndice m� �rbita nataci�n �nico alg�n �o�o Reemplazo: �rbol l�piz �lite F�lix �ndice m� �rbita nataci�n �nico alg�n �o�o Original: Ãrbol lápiz Ãlite Félix Ãndice mà Ãrbita natación Ãnico algún Ãoño Reemplazo: Ãrbol lápiz Ãlite Félix Ãndice mà Ãrbita natación Ãnico algún Ãoño
Esto podemos solucionarlo agregando primero una codificación en formato utf8 después de iniciar la función (utf8_decode o utf8_encode):
function eliminar_acentos($cadena){ $cadena = utf8_decode($cadena); // o $cadena = utf8_encode($cadena); . . . }
*No ambas al mismo tiempo.