2009-05-27 17 views
117

Estoy usando una empresa de alojamiento y enumerará los archivos en un directorio si el archivo index.html no está allí, usa iso-8859-1 como la codificación predeterminada.¿Cómo cambiar la codificación predeterminada a UTF-8 para Apache?

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

Actualización: Además, descubrí que en realidad está usando un DOCTYPE de HTML 3.2 y luego no hay charset ... así que no está configurando ninguna codificación. Pero, ¿hay alguna manera de cambiarlo para usar UTF-8?

Respuesta

149

En httpd.conf para sumar (o cambiar si ya existe):

AddDefaultCharset utf-8 
+5

¿En qué parte del archivo se agrega esto, en cualquier lugar? – systemovich

+5

@Geoffrey sí. si aún no está allí, puede colocarlo 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 simplemente para ver fácilmente lo que sí cambié de la configuración de stock). – MartinodF

+5

Agregue AddDefaultCharset utf-8 a .htaccess - funcionó un encanto para mí. (si no tiene acceso a httpd.conf) – phpmydev

6

Esto no se ha probado, pero probablemente funcione.

En su archivo .htaccess poner:

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

Sin embargo, esto requerirá mod_headers en el servidor.

+0

Eso funcionó para mí, mientras que la solución elegida no. ¡Gracias! De hecho, ni siquiera tuve que envolverlo en las etiquetas ''. – Geremia

23

Ver AddDefaultCharset Directive, AddCharset Directive y this article.

AddDefaultCharset utf-8 

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

Hay una mejor manera de hacer eso: codificar la información de juego de caracteres del nombre de archivo , y dará salida a la Apache cabecera de codificación adecuada en función de eso. Esto es posible gracias a los AddCharset líneas en el archivo de configuración, tales como la línea de abajo:

conf/httpd.conf:

AddCharset UTF-8 .utf8 

Así que si usted tiene un archivo cuyo nombres termina en .html.utf8, apache sirve la página como si estuviera codificada en UTF-8 y volcará la directiva de codificación de caracteres adecuada i n el encabezado en consecuencia.

8

No estoy seguro de si tiene acceso a la configuración de Apache (httpd.conf), sino que debe ser capaz para establecer una directiva AddDefaultCharset. Ver:

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

Busca el módulo de mod_mime.c y asegúrese de que se establece lo siguiente:

AddDefaultCharset utf-8 

o los equivalentes documentos 1.x de Apache (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 también tengan un conjunto de caracteres. Ver este para obtener más información:

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

45

Agregar a su .htaccess:

IndexOptions +Charset=UTF-8 

O, si tiene derechos de administrador, puede configurar de forma global mediante la edición de httpd.conf y añadiendo:

AddDefaultCharset UTF-8 

(Puede usar AddDefaultCharset en .htaccess también, pero no afectará a Apa directorios de directorios generados de esa manera.)

+2

Esta es una gran solución y menos invasiva que la modificación del archivo httpd.conf. –

+0

en mi servidor, el '.htaccess' también puede afectar a todos los subdirectorios, probablemente apache buscará cualquier' .htaccess' en el directorio padre hasta el directorio raíz de la carpeta del sitio web –

+1

Sí, así es como '. htaccess' funciona en todos los servidores; también afecta a todos los subdirectorios. Sin embargo, las páginas de listado de directorios generadas por Apache no pueden ser forzadas a UTF-8 usando '.htaccess' (AFAIK). –

20

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

+2

Esta respuesta merece mucho más crédito. –

+2

No existe ningún archivo como '/ etc/apache2/conf.d/charset'. Es un archivo de inclusión personalizado por su distribución. Como cualquier otro archivo que no sea 'httpd.conf'. – Evi1M4chine

+0

Su '/ etc/apache2/conf-enabled/charset.conf' en mi distribución (Ubuntu 16.4). Tampoco funcionó. –

19

En .htaccess añadir esta línea:

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

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

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 de 150-200 mS con o sin .htaccess

¿De qué sirve el rendimiento si su página no se procesa 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 juego de caracteres.

+0

¿Por qué deberían? Explica por qué esto funciona – rayryeng

+0

No puedo explicarlo, pero solo esta solución funciona para mí. Es por eso que un gran +1 –

+1

como lo mencionó anteriormente @Robbert, si aún no está utilizando los archivos '.htaccess', no comience ahora. Existen motivos de rendimiento y administrativos por los que esta es una mala idea (tm) – Signal15

6

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

Elimine la línea

AddDefaultCharset UTF-8 
2

Cuando todos los archivos HTML están en UTF-8 y no tienen etiquetas meta para el tipo de contenido, sólo fue capaz de establecer el valor predeterminado necesario para que estos archivos sean enviados por Apache 2.4 mediante la adición de las dos directivas:

AddLanguage ru .html 
AddCharset UTF-8 .html 
2

Sólo una pista si tiene nombres de archivo largos en UTF-8: de forma predeterminada, se reducirá a 20 bytes, por lo que puede darse el caso de que el último carácter podría ser "cortados a la mitad "y, por lo tanto, no reconocido adecuadamente. Entonces es posible que desee establecer lo siguiente:

entorno

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth evitará acortar los nombres de archivo, por lo que muestran de forma correcta y legible.

Como otros usuarios ya se ha mencionado, esto hay que añadir, ya sea en httpd.conf o apache2.conf (si tiene derechos de administrador) o en .htaccess (si no lo hace).

1

simplemente dejarlo vacío: 'default_charset' in WHM :::::: default_charset =''

P. S. - En WHM, vaya --------) Inicio »Configuración de servicios» Editor de configuración PHP ----) haga clic en 'Modo avanzado' ----) busque 'default_charset' y déjelo en blanco ---- simplemente nada , no utf8, no ISO

Cuestiones relacionadas