Как изменить кодировку по умолчанию на UTF-8 для Apache?

123

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

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

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

Теги:
character-encoding
apache-config

11 ответов

161
Лучший ответ

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

AddDefaultCharset utf-8
  • 6
    где в файле можно добавить это, где-нибудь?
  • 5
    @ Джеффри, да. если его там еще нет, вы можете положить его куда угодно. однако я обычно помещаю каждую «пользовательскую» директиву в конец файла по ряду причин (переопределение ранее существовавших директив, порядок и просто, чтобы легко увидеть, что я изменил по сравнению со стандартной конфигурацией).
Показать ещё 3 комментария
46

Добавьте это в свой .htaccess:

IndexOptions +Charset=UTF-8

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

AddDefaultCharset UTF-8

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

  • 2
    Это отличное решение и менее инвазивное, чем изменение файла httpd.conf.
  • 0
    на моем сервере .htaccess может повлиять на все подкаталоги, вероятно, apache будет искать любой .htaccess в родительском каталоге вплоть до корневого каталога папки сайта
Показать ещё 5 комментариев
24

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

AddDefaultCharset utf-8

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

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

conf/httpd.conf:

AddCharset UTF-8 .utf8

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

19

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

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

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

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

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

  • 0
    Зачем им? Объясните, почему это работает
  • 0
    Я не могу объяснить, но только это решение работает для меня. Вот почему большой +1
Показать ещё 3 комментария
19

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

  • 2
    Нет такого файла как /etc/apache2/conf.d/charset . Это пользовательский файл включения вашего дистрибутива. Как и любой другой файл, который не httpd.conf .
  • 0
    Его /etc/apache2/conf-enabled/charset.conf в моем дистрибутиве (Ubuntu 16.4). Также не работал.
8

Я не уверен, есть ли у вас доступ к конфигурации 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).

Однако это работает только тогда, когда "content content-type - text/plain или text/html".

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

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

6

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

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

AddDefaultCharset UTF-8
6

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

В вашем файле .htaccess поставьте:

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

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

  • 0
    Это сработало для меня, а выбранное решение - нет. Спасибо! На самом деле, мне даже не нужно было оборачивать его в теги <Files> .
2

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

IndexOptions Charset=UTF-8 NameWidth=*

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

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

2

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

AddLanguage ru .html
AddCharset UTF-8 .html
1

Просто оставьте пустым: 'default_charset' in WHM :::::: default_charset =''

p.s. - В WHM go --------) Главная "Конфигурация сервиса" Редактор конфигурации PHP ----) нажмите "Расширенный режим" ----) найдите "default_charset" и оставьте поле пустым ---- просто ничего, а не utf8, а не ISO

Ещё вопросы

Сообщество Overcoder
Наверх
Меню