¿Cómo cambiar la codificación predeterminada a UTF-8 para Apache?

138

Estoy usando una empresa de alojamiento y enumerará los archivos en un directorio si el archivo index.htmlno está allí, usa iso-8859-1 como codificación predeterminada.

Si el servidor es Apache, ¿hay alguna forma de configurar UTF-8 como predeterminado?

Actualización: Además, descubrí que en realidad está usando un DOCTYPE de HTML 3.2 y luego no hay ningún juego de caracteres ... por lo que no está configurando ninguna codificación. Pero, ¿hay alguna forma de cambiarlo para usar UTF-8?

nonopolaridad
fuente

Respuestas:

176

En httpd.conf agregue (o cambie si ya está allí):

AddDefaultCharset utf-8
MartinodF
fuente
66
¿Dónde en el archivo se agrega esto, en cualquier lugar?
systemovich
55
@ Geoffrey sí. Si aún no está allí, puede ponerlo en cualquier lugar. sin embargo, generalmente pongo todas las directivas "personalizadas" en la parte inferior del archivo por varias razones (anulando las directivas preexistentes, el orden y solo para ver fácilmente qué cambié de la configuración de stock).
MartinodF
66
Agregar AddDefaultCharset utf-8 a .htaccess: funcionó de maravilla para mí. (si no tiene acceso a httpd.conf)
richardwhitney
¿Es sensible a mayúsculas y minúsculas?
Mike Stoddart
66
Dado que esta respuesta es de 2009: en Ubuntu 18, cambia esta configuración en/etc/apache2/conf-available/charset.conf
WoodrowShigeru
55

Agregue esto a su .htaccess:

IndexOptions +Charset=UTF-8

O, si tiene derechos de administrador, puede configurarlo globalmente editando httpd.confy agregando:

AddDefaultCharset UTF-8

(Se puede utilizar AddDefaultCharseten .htaccessdemasiado, pero no va a afectar a los listados de directorios generados por Apache de esa manera.)

Mathias Bynens
fuente
44
Esta es una gran solución y menos invasiva que modificar el archivo httpd.conf.
Andrew Swift
1
en mi servidor, también .htaccesspuede afectar a todos los subdirectorios, probablemente apache buscará en .htaccessel directorio principal hasta el directorio raíz de la carpeta del sitio web
no
2
Sí, así es como .htaccessfunciona en todos los servidores: también afecta a todos los subdirectorios. Sin embargo, las páginas de listado de directorios generadas por Apache no se pueden forzar a UTF-8 utilizando .htaccess(AFAIK).
Mathias Bynens
9
Tenga en cuenta que cambiar la configuración de todo el servidor a través de .htaccessarchivos es generalmente una mala práctica. Los errores se vuelven más difíciles de rastrear cuando la configuración del servidor se distribuye en varios archivos. También hay un pequeño impacto en el rendimiento: con cada archivo solicitado, Apache tiene que leer el .htaccessarchivo del directorio y todos los .htaccessarchivos de los directorios principales. .htaccesspor lo tanto, solo debe usarse para configuraciones específicas de directorio (por ejemplo, para evitar el acceso a un directorio específico) o cuando no hay absolutamente ninguna posibilidad de obtener derechos de administrador.
Robbert
2
Una vez votado, IndexOptions + Charset = UTF-8 me sirvió, ¡gracias!
mTorres
28

Consulte la Directiva AddDefaultCharset , la Directiva AddCharset y este artículo .

AddDefaultCharset utf-8

Pero tengo que usar caracteres chinos de vez en cuando. Anteriormente, traduje los caracteres chinos al código Unicode y los incluí en el documento usando el &#hack. Pero solo es útil para la página que tiene algunos caracteres.

Hay una mejor manera de hacerlo: codifique la información del juego de caracteres en el nombre del archivo, y Apache generará el encabezado de codificación adecuado en función de eso. Esto es posible gracias a las AddCharsetlíneas en el archivo conf, como la línea a continuación:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Entonces, si tiene un archivo cuyos nombres terminan en .html.utf8, apache servirá la página como si estuviera codificada en UTF-8 y volcará la directiva de codificación de caracteres adecuada en el encabezado en consecuencia.

Eugene Yokota
fuente
23

Colocar AddDefaultCharset UTF-8en /etc/apache2/conf.d/charset. De hecho, ya está allí. Solo tiene que descomentarlo eliminando lo anterior #.

Bjartur Thorlacius
fuente
2
No hay tal archivo como /etc/apache2/conf.d/charset. Es un archivo de inclusión personalizado por su distribución. Como cualquier otro archivo que no lo sea httpd.conf.
Evi1M4chine
1
Está /etc/apache2/conf-enabled/charset.confen mi distribución (Ubuntu 16.4). Tampoco funcionó.
Alator
23

En .htaccess agregue esta línea:

AddCharset utf-8 .html .css .php .txt .js

Esto es para aquellos que no tienen acceso al archivo conf de su servidor. Es solo una cosa más para intentar cuando otros intentos fallaron.

En cuanto a problemas de rendimiento con respecto al uso de .htaccess, no he visto esto. Mis tiempos de carga de página típicos son 150-200 mS con o sin .htaccess

De qué sirve el rendimiento si su página no se representa correctamente. La mayoría de los servidores compartidos no permiten el acceso del usuario al archivo de configuración, que es el lugar preferido para agregar un conjunto de caracteres.

Incomprendido
fuente
No puedo explicarlo, pero solo esta solución funciona para mí. Es por eso que un gran +1
Skalár Wag
1
Como mencionó anteriormente @Robbert: si aún no está utilizando .htaccessarchivos, no comience ahora. Hay razones administrativas y de rendimiento por las cuales esta es una mala idea (tm)
Signal15
Cuando no incluye las extensiones, AddCharset se aplica a los Tipos de contenido text / html y text / plain.
Entendido mal el
Esto funcionó para mí, mientras que todos los toldos anteriores no. +1
Alator
La respuesta aceptada solo afecta a tex / html y text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV
10

No estoy seguro de si tiene acceso a la configuración de Apache (httpd.conf), pero debería poder establecer una Directiva AddDefaultCharset. Ver:

http://httpd.apache.org/docs/2.0/mod/core.html

Busque el módulo mod_mime.c y asegúrese de que esté configurado lo siguiente:

AddDefaultCharset utf-8 

o los documentos equivalentes de Apache 1.x ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Sin embargo, esto solo funciona cuando "el tipo de contenido de respuesta es text / plain o text / html".

También debe asegurarse de que sus páginas tengan también un conjunto de caracteres. Vea esto para más información:

http://www.w3.org/TR/REC-html40/charset.html

Jon
fuente
8

Esto no ha sido probado pero probablemente funcionará.

En su archivo .htaccess ponga:

<Files ~ "\.html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>

Sin embargo, esto requerirá mod_headers en el servidor.

MiffTheFox
fuente
Eso funcionó para mí, mientras que la solución elegida no. ¡Gracias! De hecho, ni siquiera tuve que envolverlo en <Files>etiquetas.
Geremia
8

Para completar, en Apache2 en Ubuntu, encontrará el juego de caracteres predeterminado en charset.conf en conf-available.

Descomenta la línea

AddDefaultCharset UTF-8
David Glance
fuente
3

Cuando todos los archivos HTML están en UTF-8 y no tienen metaetiquetas para el tipo de contenido, solo pude establecer el valor predeterminado necesario para que Apache 2.4 envíe estos archivos agregando ambas directivas:

AddLanguage ru .html
AddCharset UTF-8 .html
Alex
fuente
3

Solo una pista si tiene nombres de archivo largos en utf-8: de forma predeterminada, se acortarán a 20 bytes, por lo que puede ocurrir que el último carácter se "corte a la mitad" y, por lo tanto, no se reconozca correctamente. Entonces es posible que desee configurar lo siguiente:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth la configuración evitará acortar los nombres de sus archivos, haciéndolos aparecer y leer correctamente.

Como ya mencionaron otros usuarios, esto debe agregarse en httpd.confo apache2.conf(si tiene derechos de administrador) o en .htaccess(si no tiene).

pstryk
fuente
2

Solo déjalo vacío: 'default_charset' in WHM :::::: default_charset =''

ps - En WHM vaya --------) Inicio »Configuración del servicio» Editor de configuración PHP ----) haga clic en 'Modo avanzado' ----) encuentre 'default_charset' y déjelo en blanco ---- solo nada, no utf8, no ISO

grrow
fuente
0

En mi caso agregar a .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Ruslan Novikov
fuente