UTF-8 e ISO-8859-1 son codificaciones utilizadas para convertir caracteres en bytes. Si cada parte de un sitio interpreta esos bytes de una manera diferente, aparecen acentos dañados, símbolos incorrectos o rombos con signos de interrogación. La solución no consiste solamente en agregar una etiqueta HTML: el archivo, el servidor, la aplicación, la conexión y la base de datos deben utilizar una configuración coherente.
Para proyectos web actuales, UTF-8 es la opción recomendada. El estándar vigente de HTML requiere UTF-8 y esta codificación puede representar caracteres de prácticamente todos los idiomas, además de símbolos y emojis. ISO-8859-1 cubre un conjunto occidental mucho más limitado y se encuentra principalmente en sistemas heredados.
Qué es una codificación de caracteres
Una computadora almacena números, no letras. La codificación define qué secuencia de bytes corresponde a cada carácter. El mismo byte puede representar cosas distintas si se interpreta con juegos diferentes. Por eso un archivo guardado en una codificación y leído como otra produce texto corrupto.
Windows-1252 suele confundirse con ISO-8859-1 porque comparten gran parte de sus caracteres, pero no son idénticos. Antes de convertir un sitio antiguo conviene identificar la codificación real; confiar únicamente en la declaración existente puede llevar a una conclusión equivocada.
Cómo declarar UTF-8 en HTML
En HTML moderno se utiliza esta declaración dentro de <head>:
<meta charset="UTF-8">
La declaración debe aparecer completamente dentro de los primeros 1024 bytes del documento, por lo que conviene ubicarla al comienzo del encabezado. El archivo real también tiene que estar guardado como UTF-8. Cambiar el texto de la etiqueta no convierte los bytes ya almacenados.
La especificación actual de HTML exige utilizar la etiqueta utf-8. Para una página nueva no hay ventaja práctica en elegir ISO-8859-1.
La cabecera HTTP también importa
El servidor puede enviar el juego de caracteres junto con el tipo de contenido:
Content-Type: text/html; charset=UTF-8
Si la cabecera HTTP y la etiqueta meta se contradicen, el navegador puede priorizar la información recibida por HTTP. Revisá la respuesta real mediante las herramientas de desarrollo del navegador o una comprobación de cabeceras, no sólo el código fuente.
En PHP, la aplicación puede emitir esa cabecera antes de generar contenido. Los frameworks y CMS modernos normalmente ya gestionan este valor, por lo que no conviene duplicarlo sin verificar la configuración existente.
Configurar un valor predeterminado en Apache
Cuando todos los documentos de texto de una sección están realmente guardados en UTF-8 y el servidor permite la directiva, puede definirse un valor predeterminado:
AddDefaultCharset UTF-8
Apache documenta AddDefaultCharset para respuestas text/plain y text/html. En archivos .htaccess sólo funciona si la configuración del servidor autoriza el contexto FileInfo.
No apliques esta directiva globalmente a una colección de archivos con codificaciones mezcladas: la cabecera declararía UTF-8, pero los bytes seguirían siendo diferentes. La corrección adecuada es convertir los archivos o configurar cada recurso de forma coherente.
UTF-8 en MySQL y MariaDB
En una aplicación con base de datos deben coincidir varios niveles:
- El juego de caracteres de la base de datos, tablas y columnas.
- La codificación utilizada por la conexión de la aplicación.
- La codificación con la que se guardan las plantillas y archivos.
- La cabecera HTTP y la declaración HTML.
En MySQL y MariaDB se utiliza habitualmente utf8mb4 para almacenar Unicode completo. Es preferible al antiguo juego denominado utf8, que históricamente no cubrió todos los caracteres de cuatro bytes. La intercalación o collation determina cómo se comparan y ordenan los textos, pero no reemplaza al juego de caracteres.
Podés revisar tablas y columnas desde phpMyAdmin en cPanel. Antes de modificar una base en producción, generá una copia y ensayá la conversión: una operación correcta para datos limpios puede empeorar registros cuyos bytes ya fueron interpretados de forma incorrecta.
Síntomas habituales de una configuración incorrecta
Informaciónen lugar deInformación: texto UTF-8 interpretado como una codificación occidental.�: el lector encontró una secuencia de bytes inválida y utilizó el carácter de reemplazo.- Signos de interrogación almacenados en la base: el carácter original pudo perderse durante la escritura.
- Texto correcto en una página pero corrupto al guardarlo mediante un formulario: posible diferencia en la conexión o en la columna.
- Contenido que se daña cada vez más al convertirlo: probable doble codificación.
Cómo diagnosticar dónde se produce el problema
- Guardá copias de los archivos y de la base de datos.
- Comprobá la cabecera
Content-Typeque entrega el servidor. - Revisá la etiqueta
meta charsetdel documento. - Identificá con qué codificación se guardó realmente el archivo.
- Verificá el juego de caracteres de la conexión y de la columna afectada.
- Compará el dato original almacenado con el texto mostrado en el navegador.
Esta secuencia ayuda a distinguir un error de visualización de una corrupción ya almacenada. Si el dato original todavía está bien, corregir la interpretación puede recuperar la presentación. Si fue reemplazado por signos de interrogación, probablemente sea necesario restaurarlo desde una copia.
Cómo migrar un sitio heredado a UTF-8
Realizá la migración en una copia o entorno de pruebas. Inventariá archivos, plantillas, scripts, exportaciones y tablas; identificá la codificación real de cada origen y convertí una sola vez. Después ajustá las declaraciones, la conexión y la base de datos.
Probá especialmente:
- Acentos, eñes, signos de apertura y símbolos monetarios.
- Edición y guardado desde el panel del CMS.
- Formularios enviados por visitantes.
- Importaciones, exportaciones CSV y correos automáticos.
- Búsquedas, ordenamientos y URLs generadas por la aplicación.
Si la migración también implica mover archivos y datos entre servidores, seguí una secuencia controlada como la explicada en cómo migrar un sitio web con base de datos.
Errores que conviene evitar
- Declarar UTF-8 sin convertir el archivo original.
- Ejecutar conversiones repetidas sobre el mismo texto.
- Cambiar todas las tablas sin conservar una copia verificable.
- Confundir ISO-8859-1 con Windows-1252.
- Olvidar la codificación de la conexión de la aplicación.
- Forzar una cabecera global sobre archivos con formatos mezclados.
- Guardar archivos PHP con una marca BOM que genere salida antes de las cabeceras.
En un proyecto nuevo, la estrategia más simple es utilizar UTF-8 desde el comienzo y mantenerla en toda la cadena. En un sitio antiguo, primero identificá qué bytes existen realmente y después convertí de forma controlada. Esa diferencia evita que una corrección aparente termine destruyendo información que todavía podía recuperarse.