Eliminar acentos y diéresis.
Resumen.
En este artículo vamos a presentar una función que en el idioma español se hace imprescindible, su objetivo, eliminar la acentuación y las diéresis. Veremos también algunos problemas que este tipo de marca lingüística nos puede provocar cuando estamos programando y como no entender su origen nos puede provocarnos tremendos dolores de cabeza.Artículo.
Para iniciar este artículo comenzaremos con una puntualización que considero importante tener en cuenta y es que, aunque hablamos de eliminar acentos en el título, lo que en realidad vamos a eliminar son los tildes, ya que el acento es la expresión sonora de una tilde. Hecha esta puntualización, entramos en materia.
Como ya sabemos, los primeros lenguajes informáticos tuvieron su origen en los EE.UU. principalmente. Esto trajo consecuencias inherentes, y es que se usó su lenguaje, el inglés, como base de los diferentes lenguajes de programación. Por poner unos ejemplos de traducción al español:
Esto puede resolverse mediante el uso de la siguiente función
Pero no nos desviemos del asunto, con lo dicho hasta ahora solo tratábamos de contextualizar el asunto, asunto que se puede hacer mas peliagudo cuando guardamos datos en una base de datos y realizamos búsquedas e incluso a la hora de ordenar datos, por lo que si tenemos una ordenación, por ejemplo de un array, y el resultado no es el esperado, las marcas de puntuación probablemente sean las responsables.
En resumen, los acentos y diéresis tan propios del idioma español nos jugaron malas pasadas en el colegio, y ahora también, en el mundo de la programación. Por tanto, sería lógico pensar que si los eliminamos, nos quitaríamos problemas de en medio. Y para ello hemos desarrollado la siguiente función:
Como ya sabemos, los primeros lenguajes informáticos tuvieron su origen en los EE.UU. principalmente. Esto trajo consecuencias inherentes, y es que se usó su lenguaje, el inglés, como base de los diferentes lenguajes de programación. Por poner unos ejemplos de traducción al español:
- if – si
- string – cadena
- foreach – para cada
- switch – cambiar
- exit – salida
- upper – superior
La función strtoupper() convierte todos los caracteres de una cadena a mayúsculas, claro, salvo que estén acentuados, esto ocurre por que la función no actúa sobre la codificación de estos caracteres.echo "".strtoupper('programacion').""; // Devuelve PROGRAMACION echo "".strtoupper('programación').""; // Devuelve PROGRAMACIóN
Esto puede resolverse mediante el uso de la siguiente función
Que ahora sí, devolverá “PROGRAMACIÓN”.echo "".str_replace('ó', 'Ó', strtoupper('programación'))."";
Pero no nos desviemos del asunto, con lo dicho hasta ahora solo tratábamos de contextualizar el asunto, asunto que se puede hacer mas peliagudo cuando guardamos datos en una base de datos y realizamos búsquedas e incluso a la hora de ordenar datos, por lo que si tenemos una ordenación, por ejemplo de un array, y el resultado no es el esperado, las marcas de puntuación probablemente sean las responsables.
En resumen, los acentos y diéresis tan propios del idioma español nos jugaron malas pasadas en el colegio, y ahora también, en el mundo de la programación. Por tanto, sería lógico pensar que si los eliminamos, nos quitaríamos problemas de en medio. Y para ello hemos desarrollado la siguiente función:
Esperamos os resulte muy útil, seguro que os sacará de mas de un embrollo.<?php // Eliminar acentos y dieresis // Funcion desarrollada por ArtesaniaWeb.ES function No_Acento($Texto){ $valor_htm = array('á','Á','é','É','í','Í','ó','Ó','ú','Ú','ñ','Ñ','ü','Ü', 'à','À','è','È','ì','Ì','ò','Ò','ù','Ù'); // Valores originales $valor_acent = array('a','A','e','E','i','I','o','O','u','U','ñ','Ñ','u','U','a','A','e','E','i','I','o','O','u','U'); // Nuevos valores $Cambia_Texto = str_replace($valor_htm,$valor_acent,$Texto); // Separamos cada una de las letras con acentos y dieresis, y la ponemos en un array preg_match_all('/\w/u', 'áàäéèëíìïòóöùúüÀÁÄÈÉËÌÍÏÒÓÖÙÚÜ', $Texto); $cadena = array_map( function($eli_acent) { return '/'.$eli_acent.'/u'; }, $Texto[0] ); // realizamos la sustitución $sustitucion = preg_replace($cadena, str_split('aaaeeeiiiooouuuAAAEEEIIIOOOUUU'), $Cambia_Texto); return $sustitucion; } // Aplicamos la funcion $texto = 'Función que elimina acentos y diéresis. Ej: lingüística, camión, acento gràve, niño.<br /> Observe el código fuente.'; $texto_limpio = No_Acento($texto); echo "<p>$texto <hr> $texto_limpio</p>"; ?>
Tags: Acento || tilde || diéresis || puntuación