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

139

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

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

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

неполярность
источник

Ответы:

178

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

AddDefaultCharset utf-8
MartinodF
источник
6
где в файле это добавить?
systemovich
5
@ Джеффри, да. если его еще нет, вы можете положить его куда угодно. однако я обычно помещаю каждую «настраиваемую» директиву в конец файла по ряду причин (переопределение уже существующих директив, порядок и просто чтобы легко увидеть, что я изменил из стандартной конфигурации).
MartinodF
6
Добавить AddDefaultCharset utf-8 в .htaccess - мне очень понравилось. (если у вас нет доступа к httpd.conf)
richardwhitney
Это чувствительно к регистру?
Майк Стоддарт,
7
Поскольку этот ответ относится к 2009 году: в Ubuntu 18 вы меняете эту конфигурацию в/etc/apache2/conf-available/charset.conf
WoodrowShigeru
56

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

IndexOptions +Charset=UTF-8

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

AddDefaultCharset UTF-8

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

Матиас Байненс
источник
4
Это отличное решение и менее агрессивное, чем изменение файла httpd.conf.
Эндрю Свифт
1
на моем сервере это также .htaccessможет повлиять на все подкаталоги, вероятно, apache будет искать любой .htaccessродительский каталог вплоть до корневого каталога папки веб-сайта
неполярность
2
Да, так .htaccessработает на всех серверах - это также влияет на все подкаталоги. Однако страницы со списком каталогов, сгенерированные Apache, нельзя принудительно перевести в UTF-8 с помощью .htaccess(AFAIK).
Матиас Байненс,
9
Обратите внимание, что изменение настроек сервера через .htaccessфайлы, как правило, является плохой практикой. Ошибки становится труднее отслеживать, когда настройки сервера распределяются по разным файлам. Также наблюдается небольшое снижение производительности: с каждым запрошенным файлом Apache должен читать .htaccessфайл каталога и все .htaccessфайлы родительских каталогов. .htaccessпоэтому следует использовать только либо для настроек, специфичных для каталога (например, для предотвращения доступа к определенному каталогу), либо когда нет абсолютно никакой возможности получить права администратора.
Робберт
2
Проголосовал за, IndexOptions + Charset = UTF-8 помог мне, спасибо!
mTorres
28

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

AddDefaultCharset utf-8

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

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

conf/httpd.conf:

AddCharset UTF-8 .utf8

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

Юджин Йокота
источник
23

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

Бьяртур Торлациус
источник
2
Нет такого файла, как /etc/apache2/conf.d/charset. Это настраиваемый включаемый файл вашего дистрибутива. Как и любой другой файл, которого нет httpd.conf.
Evi1M4chine
1
Он /etc/apache2/conf-enabled/charset.confв моем дистрибутиве (Ubuntu 16.4). Тоже не работал.
Alator
23

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

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

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

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

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

Неправильно понятый
источник
Я не могу объяснить, но у меня работает только это решение. Вот почему большой +1
Skalár Wag
1
Как упоминалось ранее @Robbert - если вы еще не используете .htaccessфайлы, не начинайте сейчас. Это плохая идея по причинам производительности и административным причинам (tm)
Signal15,
Если вы не включаете расширения, AddCharset применяется к типам контента text / html и text / plain.
Неправильно
Это сработало для меня, в то время как все вышеперечисленные тенты - нет. +1
Алатор
Принятый ответ влияет только на tex / html и text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV
11

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

Джон
источник
8

Это не проверено, но, вероятно, сработает.

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

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

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

MiffTheFox
источник
Это сработало для меня, а выбранное решение - нет. Спасибо! Фактически, мне даже не пришлось заключать это в <Files>теги.
Geremia
8

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

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

AddDefaultCharset UTF-8
Дэвид Глэнс
источник
3

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

AddLanguage ru .html
AddCharset UTF-8 .html
Alex
источник
3

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

IndexOptions Charset=UTF-8 NameWidth=*

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

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

пстрык
источник
2

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

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

расти
источник
1

<meta charset = 'utf-8'> отменяет кодировку apache по умолчанию ( cf /etc/apache2/conf.d/charset )

Если этого недостаточно, то вы, вероятно, создали свой исходный файл с набором символов кодировки iso-8859-1 . Вы должны преобразовать его в правильный набор символов:

iconv -f ISO-8859-1 -t UTF-8 source_file.php -o new file.php
Габи
источник
0

В моем случае добавить в .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Руслан Новиков
источник