Директива AddDefaultCharset


Добавив директиву adddefaultcharset в .htaccess можно задать кодировку для всех файлов в текущем каталоге и других каталогах, находящихся ниже в иерархическом дереве.



AddDefaultCharset в .htaccess


Где вообще для веб приложения может задаваться кодировка

1. Кодировка веб страницы определяется тем, в каком формате ее содержимое было сохранено перед загрузкой на сервер.



2. Также в HTML5 прописывается заголовок, указывающий браузеру какую кодировку использовать:

<meta charset='UTF-8'>



3. После загрузки бОльшее значение начинает иметь кодировка, указываемая в конфигурационном файле веб-сервера.

Кодировка задается за счет AddDefaultCharset, это может быть стандартная utf-8 или любая другая кодировка

<VirtualHost :80>
ServerName example.com
AddDefaultCharset utf-8

</VirtualHost>



Если директиву не указывать остается возможность более тонкой настройки за счет  файла .htaccess.



Файлов .htaccess может присутствовать на сервере неограниченное количество, по одному в каждом каталоге.

Например, .htaccess в домашнем каталоге www/example.com/, .htaccess в  www/example.com/admin и т.д.

Какие из файлов будут обрабатываться веб-сервером определяет параметр конфигурации Allowoverride.



В каждом из них может задаваться своя кодировка, в некоторых случаях это требуется.

Возможно такое поведение только при использовании в качестве веб-сервера Apache поскольку .htaccess обрабатывается исключительно им.


mcedit www/example.com/.htaccess

adddefaultcharset utf-8



Для корня ресурса задана кодировка UTF-8, для каких-то из вложенных каталогов ее можно переопределить добавив директиву с другим значением в .htaccess

mcedit www/example.com/admin/.htaccess

adddefaultcharset windows-1251



Все файлы, отдаваемые сервером из www/example.com/admin теперь будут в кодировке windows-1251



Как проверить значение установленное через adddefaultcharset


Проверять можно используя консольную утилиту curl или при помощи сервиса, выводящего заголовки при HTTP запросе.



Примеры вывода при выполнении команды curl -I 123.123.123.123

До добавлении последней приведенной инструкции в .htaccess

adddefaultcharset none


После добавлении последней приведенной инструкции в .htaccess

adddefaultcharset utf-8


На втором скриншоте видно, что появился заголовок charset



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

Для современных сайтов обычно это UTF-8. Кодировка задается в meta-тэгах, конфигурационных файлах веб-сервера (или .htaccess) и настройках MySQL.


Читайте про HTTP ответы сервера и о том, как пользоваться curl

Сказать спасибо