Utilizamos cookies propias y de terceros, para realizar el análisis de la navegación de los usuarios. Si continúas navegando, consideramos que aceptas su uso. Puedes cambiar la configuración u obtener más información aquí.

gestiweb 15 años

facebook Google Plus twitter pinterest

Problemas html acentos y eñes: charset UTF-8 / ISO-8859-1

La codificación de las páginas web (charset) es un problema recurrente para los webmasters, porque:

Por lo general, si nunca tienen que aparecer acentos o eñes en nuestra web, nos es indiferente la codificación (aunque pueden haber otros símbolos que nos fastidien). Aunque si nuestra web está en español, lo más normal es que coloquemos acentos y eñes. Para ello, el estándar HTML está preparado para colocar todos los símbolos y acentos que nos sean necesarios, codificándolos. Así, para los acentos y eñes, deberíamos colocar:

á -> á
é -> é
í -> í
ó -> ó
ú -> ú
ñ -> ñ

Variantes valenciano-catalán-balear para acentos abiertos:

à -> à
è -> è
ò -> ò

De este modo, veremos todos caracteres correctamente, independientemente del charset.

Sin embargo, puede ser tedioso para ciertos contenidos tener que ir traduciendo nosotros manualmente los caracteres. Es en estos casos donde vale la pena perder un poco de tiempo para ajustar las distintas configuraciones.


Primero, habría que determinar en nuestra web con las etiquetas META que nuestra web debe servirse en la codificación que nosotros elijamos. O sea, dentro de :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

o bien

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />


Si seguimos con el problema, Segundo, ver si por defecto tiene el servidor (apache) algún charset predefinido. Si es así, se ignorarán las etiquetas META del html.
En un servidor Linux, el archivo charset está en:

/etc/apache2/conf.d/charset

también puede cambiarse en el archivo httpd.conf

Debería aparecer sólo "AddDefaultCharset off", para que haga caso de las etiquetas META (lo ideal). Podemos poner, por ejemplo, "AddDefaultCharset UTF-8", y así apache siempre emitirá las webs en UTF-8. El problema es que esto afecta a todo el servidor, y si luego tenemos alguna web que vaya a usar otra codificación tendremos un problema. Por eso, lo ideal es que esté a Off y que cada web defina cómo quiere mostrarse.

Pero puede darse el caso de que nosotros no seamos los administradores del servidor y sólo tengamos un Plesk, y no podamos acceder al archivo charset por encontrarse fuera de nuestro rango de permisos. Podemos, entonces, pedirle al administrador del servidor que coloque el parámetro anterior a Off, o bien...


Alternativa 1: Colocar un archivo .htaccess en el directorio raíz de la web
Los .htaccess son archivos de configuración que sobreescriben algunas configuraciones del apache sólo para determinados casos. Hay que tener en cuenta que estos archivos:

Este archivo .htaccess debería tener al menos una línea de este tipo

AddDefaultCharset utf-8


Alternativa 2: Colocar una directiva en php que fuerce a mostrarse en la codificación deseada
Esto es, sólo sirve si el archivo tiene extensión ".php". Recordemos que el html y el php pueden convivir en el mismo fichero, con lo que si renombramos un ".html" a ".php", el resutlado es exactamente el mismo (si tenemos instalado el php en nuestro servidor, claro está).
En la primera línea del archivo que deseemos indicarle la codificación (o lo antes posible) deberíais colocar la siguiente cabecera:

<?php header('Content-Type: text/html; charset=UTF-8'); ?>


Para todos los casos donde funcione el comando "AddCharset"
- Puede especificarse el charset según la extensión del archivo. Si, por ejemplo, queremos que los ".php" sean UTF-8 y los ".html" sean ISO, podemos colocar estas dos instrucciones seguidas:

AddCharset UTF-8 .php
AddCharset ISO-8859-1 .html