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:
- Encabezado Content-Type de HTTP
- marca de orden de bytes (BOM)
- declaración XML
- metaelemento
- 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://servidor.dominio: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:
Habiendo consultado otros proyectos en nuestro servidor, todos ellos han optado por el reemplzado de los caracteres especiales.