Problema de codificación UTF8, Internet Explorer 8 y PHP
El otro día tuve que tocar una web antigua de un compañero que estaba hecha en PHP4. Al abrir los archivos para hacer unos cambios que me pidieron, estos estaban codificados en vete tu a saber que codificación, así que al hacer cambios se estaba autocodificando todo en UTF8. Al hacer pruebas, todo va bien, en Chrome, Safari y Firefox se ve todo estupendamente, incluso en Internet Explorer 9 se veia bien, eso si, no sin antes añadir en la página el meta indicando que está codificada en UTF8. El problema es que cuando abres la misma web en Internet Explorer 8, este no muestra bien la codificación y esto es porque Internet Explorer 8 no lee bien el charset del meta de Content-Type y por tanto toma la codificación por defecto.
Una nota interesante es que Internet Explorer 8, aunque no reconoce el meta de Content-Type, si que reconoce el encabezado Content-Type que se envia desde el servidor en el protocolo http, por lo que, siguiendo unos sencillos pasos podemos paliar este problema y migrar esos proyectos antiguos que puedan haber por ahí a editores mas modernos.
- Recodificar el proyecto. Podemos utilizar un editor que guarde los archivos por defecto en UTF8 o hacernos de algún script que lo haga por nosotros.
- Añadir el meta de UTF8. En todas las páginas publicas, debemos añadir un meta de UTF8 y si ya existiera con el típico ISO-8859-1, cambiarlo a UTF8. Algo como <meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8″ />
- Por último y no menos importante, devolver el encabezado de http con el Content-Type en UTF-8. Con algo como esto: header(‘Content-type: text/html; charset=utf-8’);
El código resultante sería en nuestro html:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title> Indalcasa</title> ...
Y nuestro php, antes de devolver nada de texto, pintar la cabecera de http:
<?php header('Content-type: text/html; charset=utf-8'); ?>
Por último comentaros que w3c recomienda en HTML5 que el meta de Content-Type se ponga como el primer elemento dentro del head antes incluso que el title para que se pueda interpretar correctamente la página.