utf-8 partial
iTank ideas

Cómo solucionar problemas con las tablas de caracteres en entornos LAMP

utf-8 partial

Hacía tiempo que no me encontraba con los dichosos problemas en las tablas de codificación de caracteres en el servidor web Apache con PHP o incluso páginas HTML dinámicas construídas por scripts en Perl.

La solución es sencilla: hay que establecer el mismo charset en Apache, PHP y HTML. Yo he elegido UTF-8 como charset predeterminado en mis servidores web.

Lo primero es entender qué pasa y dónde está la incongruencia. El problema suele ser que el navegador tiene distintas codificaciones entre las que elegir y utiliza la que no nos interesa:

La herramienta W3C Internationalization Checker es la clave aunque también podemos verificar los encabezados HTTP (HTTP headers) que envía nuestro servidor web Apache.

Para establecer la tabla de caracteres predeterminada en Apache hay que editar /etc/apache2/httpd.conf y añadir la línea
AddDefaultCharset UTF-8

Si queremos especificar una tabla de caracteres distinta para un directorio virtual hay que editar el .htaccess correspondiente y añadir
AddDefaultCharset UTF-16

Para establecer la tabla de caracteres predeterminada de PHP hay que editar /etc/php5/apache2/php.ini y establecer la directiva
default_charset = "utf-8"

aunque también podemos establecer la codificaicón desde nuestro código fuente PHP usando la función header() antes del cuerpo de nuestro output
header ('Content-type: text/html; charset=utf-8');

Por último es obligatorio establecer la codificación de caracteres en la salida HTML en el tag <head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >