Как изменить кодировку по умолчанию на UTF-8 для Apache? - PullRequest
129 голосов
/ 27 мая 2009

Я использую хостинговую компанию, и она перечислит файлы в каталоге, если файл index.html отсутствует, в качестве кодировки по умолчанию используется iso-8859-1.

Если сервер Apache, есть ли способ установить вместо него UTF-8 по умолчанию?

Обновление: Кроме того, я обнаружил, что он на самом деле использует DOCTYPE HTML 3.2, а затем вообще не используется кодировку ... поэтому он не устанавливает никакой кодировки. Но есть ли способ изменить его на использование UTF-8?

Ответы [ 11 ]

162 голосов
/ 27 мая 2009

В httpd.conf добавить (или изменить, если он уже есть):

AddDefaultCharset utf-8
49 голосов
/ 07 июня 2012

Добавьте это к вашему .htaccess:

IndexOptions +Charset=UTF-8

Или, если у вас есть права администратора, вы можете установить его глобально, отредактировав httpd.conf и добавив:

AddDefaultCharset UTF-8

(Вы также можете использовать AddDefaultCharset в .htaccess, но это не повлияет на списки каталогов, созданные Apache.)

24 голосов
/ 27 мая 2009

См. Директива AddDefaultCharset , Директива AddCharset и эта статья .

AddDefaultCharset utf-8

Но я должен использовать китайские иероглифы сейчас и тогда. Ранее я перевел Китайские иероглифы в код Unicode и включить его в документ, используя &# взломать. Но это полезно только для страница, содержащая несколько символов.

Есть лучший способ сделать это: закодировать информацию о кодировке в имя файла, и Apache выведет правильный заголовок кодирования, основанный на этом. Это возможно благодаря AddCharset строк в файле conf, такие как строка ниже:

conf/httpd.conf

AddCharset UTF-8 .utf8

Так что если у вас есть файл, чей имена оканчиваются на .html.utf8, apache будет обслуживать страницу, как будто она закодирована в UTF-8 и будет правильно сваливать директива кодировки символов в заголовок соответственно.

22 голосов
/ 06 марта 2013

Поместите AddDefaultCharset UTF-8 в /etc/apache2/conf.d/charset. На самом деле, это уже там. Вы просто должны раскомментировать его, удалив предыдущий #.

21 голосов
/ 12 августа 2014

В .htaccess добавьте эту строку:

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

Это для тех, у кого нет доступа к файлу conf их сервера. Это просто еще одна попытка, когда другие попытки не увенчались успехом.

Что касается проблем с производительностью использования .htaccess, я не видел этого. Мое типичное время загрузки страницы составляет 150-200 мс с или без .htaccess

Что хорошего в производительности, если ваша страница отображается неправильно. Большинство общих серверов не разрешают пользователю доступ к файлу конфигурации, который является предпочтительным местом для добавления набора символов.

8 голосов
/ 27 мая 2009

Я не уверен, есть ли у вас доступ к конфигурации Apache (httpd.conf), но вы сможете установить директиву AddDefaultCharset. См:

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

Найдите модуль mod_mime.c и убедитесь, что установлено следующее:

AddDefaultCharset utf-8 

или эквивалентные документы Apache 1.x (http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset).

Однако это работает только в том случае, если «тип содержимого ответа - text / plain или text / html».

Вы также должны убедиться, что на ваших страницах также установлен набор символов. См. Это для получения дополнительной информации:

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

7 голосов
/ 27 мая 2009

Это не проверено, но, вероятно, будет работать.

В вашем .htaccess файле положите:

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

Однако для этого потребуются mod_headers на сервере.

6 голосов
/ 26 августа 2014

Для полноты, в Apache2 в Ubuntu вы найдете кодировку по умолчанию в charset.conf в conf-available.

Раскомментируйте строку

AddDefaultCharset UTF-8
2 голосов
/ 03 мая 2016

Просто подсказка, если у вас длинные имена файлов в utf-8: по умолчанию они будут сокращены до 20 байтов, поэтому может случиться, что последний символ будет «разрезан пополам» и, следовательно, не распознан должным образом. Тогда вы можете установить следующее:

IndexOptions Charset=UTF-8 NameWidth=*

Настройка

NameWidth предотвратит сокращение имен файлов, делая их правильно отображаемыми и читаемыми.

Как уже упоминали другие пользователи, это следует добавить либо в httpd.conf или apache2.conf (если у вас есть права администратора), либо в .htaccess (если у вас нет).

2 голосов
/ 11 декабря 2014

Там, где все файлы HTML находятся в UTF-8 и не имеют мета-тегов для типа контента, я смог установить только необходимые значения по умолчанию для этих файлов, которые будут отправляться Apache 2.4, добавив обе директивы:

AddLanguage ru .html
AddCharset UTF-8 .html
...