Migrar aplicación de ISO 8859-1 a UTF-8

UTF-8 es la codificación por excelencia de páginas web al ser un formato de caracteres unicode:
Unicode es un estándar de codificación de caracteres diseñado para facilitar el tratamiento informático, transmisión y visualización de textos de múltiples lenguajes y disciplinas técnicas, además de textos clásicos de lenguas muertas. El término Unicode proviene de los tres objetivos perseguidos: universalidad, uniformidad y unicidad.
El 86,8 % de los sitios de internet utilizan UTF-8, este post va dirigido al 6,4 % que sigue utilizando ISO 8859-1. En la siguiente gráfica podemos ver la distribución de las 5 principales codificaciones de caracteres según la w3techs.



Para todos los que deseen cambiar a UTF-8 (se puede aplicar a cualquier codificación de origen) deben tener en cuenta las siguientes cuestiones a modificar:
  1. La codificación de la base de datos
  2. La codificación de nuestro código fuente
  3. La codificación de nuestro PHP
  4. La codificación de nuestro servidor web

Migrando una base de datos MySQL de latin1 a utf8

Existen infinidad de soluciones para esto pero en bases de datos grandes, como era mi caso, pueden ser muy engorrosas. Yo he optado por una solución más sencilla: realizar un backup completo y convertir directamente este archivo a UTF8 para luego importarlo nuevamente. Veamos como.

Una vez creado el backup completo de la base de datos utilizaremos un programa que permita abrir archivos grandes y modificar su codificación, en mi caso he optado por 010 Editor, cuando lo hayamos abierto le cambiamos la codificación de la siguiente forma:


En la ventana que nos aparece debemos elegir como codificación de origen la que actualmente tenemos, el caso de latin1 es ASCII+ANSI


El proceso de conversión suele tardar un poco dependiendo del tamaño del archivo pero una vez finalizado lo único que nos queda es sustituir en el sql de cada tabla y campo la codificación anterior por la nueva, basta con hacer una búsqueda por latin1 y sustituirla por utf8. Importamos el backup y ya tenemos nuestra base de datos actualizada y correcta.

La codificación de nuestro código fuente

Esta puede ser la tarea más tediosa porque tenemos que cambiar nuestro IDE para que tenga la nueva configuración y sustituir manualmente todos los caracteres mal codificados, o utilizar 010 Editor con cada archivo.

Debemos eliminar todas las funciones de conversión de caracteres como utf8_encode y utf8_decode, ademas de todos los header de php con charset especificado. Sustituir el charset de los archivos HTML también.

Cambiando la codificación de PHP y el servidor web

Esto depende de cada proyecto, en mi caso con editar default_charset en el php.ini fue suficiente pero hay que comprobar las configuraciones de htacess en caso de usar archivos php.ini personalizados con apache. En caso de utilizar nginx debemos ver si en la configuración del server tenemos especificado el charset para nuestro sitio web.

Con estos sencillos pero trabajosos pasos hemos logrado migrar un sitio web de ISO 8859-1 a UTF-8. Yo he tardado en el proceso alrededor de 1 hora.

Comentarios