Como alterar a codificação padrão para UTF-8 para Apache?


138

Estou usando uma empresa de hospedagem e ele listará os arquivos em um diretório, se o arquivo index.htmlnão estiver lá, ele usa iso-8859-1 como a codificação padrão.

Se o servidor for Apache, existe uma maneira de definir o UTF-8 como padrão?

Atualização: Além disso, descobri que ele está realmente usando um DOCTYPE de HTML 3.2 e, em seguida, não existe um conjunto de caracteres ... portanto, não está definindo nenhuma codificação. Mas existe uma maneira de alterá-lo para usar UTF-8?

Respostas:


176

No httpd.conf, adicione (ou altere se já estiver lá):

AddDefaultCharset utf-8

6
onde no arquivo se adiciona isso, em algum lugar?
systemovich 13/09/10

5
@Geoffrey yes. se ainda não estiver lá, você pode colocá-lo em qualquer lugar. no entanto, eu costumo colocar todas as diretivas "personalizadas" na parte inferior do arquivo por vários motivos (substituindo diretivas pré-existentes, ordem e apenas para ver facilmente o que eu mudei da configuração de estoque).
15139 MartinodF

6
Adicionar AddDefaultCharset utf-8 ao .htaccess - funcionou um charme para mim. (se você não tiver acesso a httpd.conf)
richardwhitney

É sensível a maiúsculas e minúsculas?
precisa

6
Como esta resposta é de 2009: no Ubuntu 18, você altera essa configuração em/etc/apache2/conf-available/charset.conf
WoodrowShigeru 11/11/19

55

Adicione isto ao seu .htaccess:

IndexOptions +Charset=UTF-8

Ou, se você tiver direitos de administrador, poderá configurá-lo globalmente editando httpd.confe adicionando:

AddDefaultCharset UTF-8

(Você pode usar AddDefaultCharsetno .htaccesstambém, mas isso não afetará as listagens de diretório Apache gerados dessa forma.)


4
Esta é uma ótima solução e menos invasiva do que modificar o arquivo httpd.conf.
Andrew Swift

1
no meu servidor, o .htaccesspode afetar todos os subdiretórios, bem como, provavelmente apache irá procurar qualquer .htaccesso diretório pai todo o caminho para o diretório raiz da pasta website
nonopolarity

2
Sim, é assim que .htaccessfunciona em todos os servidores - afeta também todos os subdiretórios. No entanto, as páginas de listagem de diretório geradas pelo Apache não podem ser forçadas a UTF-8 usando .htaccess(AFAIK).
Mathias Bynens 27/09/12

9
Observe que alterar as configurações em todo o servidor por meio de .htaccessarquivos geralmente é uma prática ruim. Os erros se tornam mais difíceis de rastrear quando as configurações do servidor são distribuídas por vários arquivos. Também há um pequeno impacto no desempenho: com cada arquivo solicitado, o Apache precisa ler o .htaccessarquivo do diretório e todos os .htaccessarquivos dos diretórios pai. .htaccessportanto, deve ser usado apenas para configurações específicas do diretório (por exemplo, impedir o acesso a um diretório específico) ou quando não houver absolutamente nenhuma possibilidade de obter direitos de administrador.
Robbert

2
Votado, o IndexOptions + Charset = UTF-8 fez o truque para mim, obrigado!
MTorres

28

Consulte Diretiva AddDefaultCharset , Diretiva AddCharset e este artigo .

AddDefaultCharset utf-8

Mas tenho que usar caracteres chineses de vez em quando. Anteriormente, traduzi caracteres chineses para código Unicode e incluí-o no documento usando o &#hack. Mas é útil apenas para páginas com alguns caracteres.

Existe uma maneira melhor de fazer isso: codifique as informações do conjunto de caracteres no nome do arquivo e o apache exibirá o cabeçalho de codificação adequado com base nisso. Isso é possível graças às AddCharsetlinhas no arquivo conf, como a linha abaixo:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Portanto, se você tiver um arquivo cujos nomes terminem .html.utf8, o apache servirá a página como se estivesse codificada em UTF-8 e despejará a diretiva de codificação de caracteres adequada no cabeçalho.


23

Coloque AddDefaultCharset UTF-8em /etc/apache2/conf.d/charset. De fato, já está lá. Você apenas precisa remover o comentário removendo o anterior #.


2
Não existe um arquivo como /etc/apache2/conf.d/charset. É um arquivo de inclusão personalizado por sua distribuição. Como qualquer outro arquivo que não seja httpd.conf.
Evi1M4chine

1
É /etc/apache2/conf-enabled/charset.confna minha distribuição (Ubuntu 16.4). Também não funcionou.
Alator

23

Em .htaccess, adicione esta linha:

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

Isso é para aqueles que não têm acesso ao arquivo conf do servidor. É apenas mais uma coisa a tentar quando outras tentativas falharam.

Quanto aos problemas de desempenho relacionados ao uso do .htaccess, eu não vi isso. Meus tempos de carregamento de página típicos são 150-200 mS com ou sem .htaccess

Qual é o bom desempenho se sua página não for renderizada corretamente. A maioria dos servidores compartilhados não permite acesso do usuário ao arquivo de configuração, que é o local preferido para adicionar um conjunto de caracteres.


Não sei explicar, mas apenas esta solução funciona para mim. É por isso que um grande +1
Skalár Wag

1
Conforme mencionado por @Robbert anteriormente - se você ainda não estiver usando .htaccessarquivos, não inicie agora. Há desempenho e administrativas razões pelas quais esta é uma má idéia (tm)
Signal15

Quando você não inclui as extensões, o AddCharset é aplicado aos tipos de conteúdo text / html e text / plain.
Incompreendido

Isso funcionou para mim, enquanto todos os awnsers acima não. +1
Alator 04/03/19

A resposta aceita afeta apenas tex / html e text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

Não tenho certeza se você tem acesso à configuração do Apache (httpd.conf), mas deve poder definir uma diretiva AddDefaultCharset. Vejo:

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

Procure o módulo mod_mime.c e verifique se o seguinte está definido:

AddDefaultCharset utf-8 

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

No entanto, isso só funciona quando "o tipo de conteúdo da resposta é texto / sem formatação ou texto / html".

Você também deve garantir que suas páginas também tenham um conjunto de caracteres. Veja isto para mais informações:

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


8

Isso não foi testado, mas provavelmente funcionará.

No seu arquivo .htaccess, coloque:

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

No entanto, isso exigirá mod_headers no servidor.


Isso funcionou para mim, enquanto a solução escolhida não. Obrigado! Na verdade, nem precisei envolvê-lo em <Files>tags.
Geremia 30/03

8

Para completar, no Apache2 no Ubuntu, você encontrará o charset padrão em charset.conf em conf-available.

Remova o comentário da linha

AddDefaultCharset UTF-8

3

Onde todos os arquivos HTML estão em UTF-8 e não possuem metatags para o tipo de conteúdo, eu só consegui definir o padrão necessário para que esses arquivos sejam enviados pelo Apache 2.4 adicionando as duas diretivas:

AddLanguage ru .html
AddCharset UTF-8 .html

3

Apenas uma dica se você tiver nomes de arquivos longos em utf-8: por padrão, eles serão encurtados para 20 bytes, portanto, pode acontecer que o último caractere seja "cortado ao meio" e, portanto, não seja reconhecido corretamente. Você pode definir o seguinte:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth Essa configuração evitará encurtar os nomes dos arquivos, tornando-os exibidos e legíveis corretamente.

Como outros usuários já mencionados, isso deve ser adicionado em httpd.confou apache2.conf(se você tiver direitos de administrador) ou em .htaccess(se não tiver).


2

Apenas deixe em branco: 'default_charset' in WHM :::::: default_charset =''

ps - No WHM, vá para --------) Início »Configuração do Serviço» Editor de Configuração do PHP ----) clique em 'Modo Avançado' ----) encontre 'default_charset' e deixe em branco ---- apenas nada, nem utf8, nem ISO


0

No meu caso, adicione ao .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.