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:
  • if – si
  • string – cadena
  • foreach – para cada
  • switch – cambiar
  • exit – salida
  • upper – superior
Y como bien sabemos, en el lenguaje inglés, el concepto de tilde no existe, lo que nos traerá consecuencias, veamos:
echo "".strtoupper('programacion')."";    // Devuelve PROGRAMACION echo "".strtoupper('programación')."";     // Devuelve PROGRAMACIóN
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.

Esto puede resolverse mediante el uso de la siguiente función
echo "".str_replace('ó', 'Ó', strtoupper('programación'))."";
Que ahora sí, devolverá “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:
<?php  // Eliminar acentos y dieresis // Funcion desarrollada por ArtesaniaWeb.ES function No_Acento($Texto){     $valor_htm = array('&aacute;','&Aacute;','&eacute;','&Eacute;','&iacute;','&Iacute;','&oacute;','&Oacute;','&uacute;','&Uacute;','&ntilde;','&Ntilde;','&uuml;','&Uuml;',     '&agrave;','&Agrave;','&egrave;','&Egrave;','&igrave;','&Igrave;','&ograve;','&Ograve;','&ugrave;','&Ugrave;');    // 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($cadenastr_split('aaaeeeiiiooouuuAAAEEEIIIOOOUUU'), $Cambia_Texto);         return $sustitucion; } // Aplicamos la funcion $texto 'Funci&oacute;n que elimina acentos y diéresis. Ej: ling&uuml;ística, camión, acento gràve, ni&ntilde;o.<br /> Observe el c&oacute;digo fuente.'; $texto_limpio No_Acento($texto); echo "<p>$texto  <hr>  $texto_limpio</p>"; ?>
Esperamos os resulte muy útil, seguro que os sacará de mas de un embrollo.
Tags: Acento || tilde || diéresis || puntuación

Comentarios.

Sin comentarios, publica el tuyo.