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

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

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

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

11 ответов

Решение

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

AddDefaultCharset utf-8

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

IndexOptions +Charset=UTF-8

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

AddDefaultCharset UTF-8

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

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

AddDefaultCharset utf-8

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

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

conf/httpd.conf:

AddCharset UTF-8 .utf8

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

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

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

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

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

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

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

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

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

AddDefaultCharset UTF-8

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

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

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

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

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

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

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

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

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

IndexOptions Charset=UTF-8 NameWidth=*

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

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

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

AddLanguage ru .html
AddCharset UTF-8 .html

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

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

отменяет кодировку 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

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

AddDefaultCharset off
AddDefaultCharset windows-1252
Другие вопросы по тегам