Durante la administración de nuestros servidores, siempre exigimos a nuestros clientes ajustar sus caracteres especiales (tíldes, ñ y otros…) a sus equivalentes compatibles para HTML. Sin embargo pueden surgir excepciones durante determinados desarrollos, en uno de ellos me vi obligado a buscar la solución a un problema puntual con UTF8 y Apache 2.2

Nuestro servidor Apache que presentan los documentos HTML tiene por default la configuración Charset en Off.

mortiz@aqui:~$ /etc/apache2/conf.d/charset

El valor es Off ya que es una configuración global y así se busca no afectar el Charset de todos los sitios web publicados en el mismo servidor web..

Siendo el orden de precedencia como lo indica la regulación de W3:

  1. Encabezado Content-Type de HTTP
  2. marca de orden de bytes (BOM)
  3. declaración XML
  4. metaelemento
  5. atributo de enlace charset

Los archivos HTML

Según el editor que usemos emacs / vim / notepad++ / nano tendremos (o no) una codificación BOM (Byte Order Mark).

Para evitar modificar los headers y la extensión de los archivos se descarta forzar la cabecera con PHP, del mismo modo también se descarta cambiar todos los archivos a BOM.

La corrección se realiza entonces, agregando una directiva de servidor en el archivo del proxy reverso:

RewriteRule ^/xxx$ /xxx/ [R]
ProxyPass /xzz/xxx http://viena.ar.most:8080/zzz/xxx [^]
AddDefaultCharset utf-8
AddCharset utf-8 .css .js .html .htm .php

Ésto no es una configuración recomendada, no hace portable al sitio y lo hace dependiente de la configuración del servidor web.

Por lo tanto, mis recomendaciones serían:

Traducir tíldes, caracteres especiales y letras en español a sus respectivos valores en HTML (á –> á) éso se soluciona fácilmente con “Buscar y reemplazar” de muchos editores de texto.

Codificar los archivos con BOM, Editores de texto como MAC o Notepad++ permiten hacerlo fácilmente.

A continuación adjunto los enlaces consultados con éstas regulaciones:

http://www.w3.org/International/questions/qa-html-encoding-declarations.es.php#html5charset [^]

http://www.w3.org/International/O-HTTP-charset [^]

http://www.w3.org/International/questions/qa-html-encoding-declarations.es.php#httpsummary [^]
Habiendo consultado otros proyectos en nuestro servidor, todos ellos han optado por el reemplzado de los caracteres especiales.