Этот раздел появился благодаря (фактически полностью состоит из) статьям Андрея А. Чернова. Подробную информацию по этому вопросу можно найти на страничке А.А. Чернова KOI8-R - Russian Net Character Set.
Всемирное падение нравов началось с незначительной уступки пользователям. Как известно, в стандартах по HTML/HTTP чётко сказано, что каждому документу должен соответствовать такой параметр, как MIME-имя кодировки, и есть только один случай, когда его можно не указывать — если документ составлен в кодировке ISO 8859-1. Это правило оказалось либо совершенно неизвестным, либо невыносимо сложным для неподготовленных пользователей, так что они предпочли проигнорировать его, и странички создавались просто набиванием некоторых кодов.
Далее, компании Netscape начал поступать поток претензий, что странички, набитые таким образом, не видны. Вместо того, чтобы отослать ламеров к документации, компания Netscape делает фатальный ход, минимально необходимый, чтобы все окончательно разрушить — вводит возможность выбора кодировки для страничек, где она не указана!
Естественно, после такого уже никто не считает нужным указывать кодировку документа; раньше останавливало хотя бы то обстоятельство, что были затруднения с просмотром кривых страничек, требующие такой достаточно сложной операции, как замена шрифта ISO 8859-1 на шрифт используемой кодировки, теперь это препятствие было преодолено благодаря попустительству Netscape. Вслед за Netscape этот фатальный шаг делают и производители остальных броузеров, из соображений выживания в конкурентной борьбе. Вернуть все назад невозможно из-за тех же коммерческих соображений...
Тем самым, теперь выбор кодировки переносится с автоматического уровня на пользовательский, отсюда все эти надоедливые "Выберите вашу кодировку" и на страничках, и в броузерах.
В связи с общей коммерциализацией Интернет такие вещи, как соответствие стандартам, уже перестают быть аргументом, и продукты, ещё следующие им, потихоньку вытесняются в маргинальные области. В общем, процесс повторяет происходящее в социуме, и будет продолжаться до тех пор, пока участников не начнёт тошнить. Этот порог отодвигается все дальше и дальше благодаря удивительным способностям человеческого организма к адаптации...
ВНИМАНИЕ! Иногда я слышу безответственные "мнения" по поводу того, что указывать кодировку необязательно и не нужно: мол, пользователь у нас не ленивый, выберет вручную. При этом "советчики" злостно умалчивают о том, что надёжного автоматического определения кодировки не существует и не может существовать в принципе; так что вебмастера, не проставляющие кодировку, с какой-то вероятностью ставят свои странички под удар быть неверно истолкованными разного рода системами автоматической обработки текста, например, поисковыми машинами. Это все равно как вам бы предложили согласиться быть убитым с небольшой вероятностью, скажем 3%. И зачем вам это нужно?
Здесь приведена пошаговая инструкция правильной подготовки ваших русских страничек для WWW:
Если у вас на страничках стоит выбор кодировок, выкиньте этот кусок HTML кода: он вам больше не понадобится — отныне все будет происходить автоматически.
Если у вас странички не в кодировке KOI8-R, перекодируйте их туда каким-нибудь конвертером — смотрите раздел “Символьная перекодировка”. Ничего страшного не произойдёт: если все дальнейшее вы сделаете правильно, то в таком виде их по-прежнему можно будет редактировать, скажем, в Netscape Composer без всякой заметной разницы. Мало того, в таком виде ваши странички будут одинаково хорошо видны для всех операционных систем без всяких переключателей кодировок, превратившихся в бич русского WWW.
Внимание! Данный пункт можно пропустить, если на вашем сервере стоит Apache или какая-либо его разновидность (то есть в 90% случаев) — в этом случае необходимая информация может быть задана в настройках Apache. Если же вы предполагаете частые переезды с сервера на сервер с неизвестными HTTPD, следуйте указаниям пункта.
Проверьте самую первую строчку ваших русских HTML документов, она должна выглядеть примерно так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
Если такой строчки нет, или номер после слова HTML меньше 4.0, добавьте её в самое начало. Примечание для специалистов: атрибут LANG определён только в HTML 4.0 и выше, так что указание DTD обязательно.
Замените следующий за ней таг <HTML> на таг <HTML LANG=ru>, это укажет, что ваш документ на русском языке, и облегчит жизнь поисковикам.
Спросите вашего веб-мастера, что за штука стоит у вас в качестве веб-сервера, если он ответит:
что Apache или Apache/RUS: в самом верхнем каталоге, содержащем ваши странички, создайте файл с именем .htaccess, доступный всем на чтение с такими строчками:
Для версий Apache, начиная с 1.3.12:
AddDefaultCharset koi8-r AddLanguage ru .html .txt
Для версий Apache, начиная с 1.3.10:
AddCharset koi8-r .html .txt AddLanguage ru .html .txt
Для более старых версий Apache (или если версия вам неизвестна):
AddType "text/html; charset=koi8-r" .html AddType "text/plain; charset=koi8-r" .txt AddLanguage ru .html .txt
Если файл .htaccess уже есть, просто добавьте туда эти строчки.
Записанное в .htaccess распространяется на все подкаталоги вниз по дереву.
Подразумевается, что ваши HTML документы заканчиваются на .html; если они заканчиваются на .htm, поменяйте .html на .htm в предлагаемом образце.
При таких настройках не обязательно (но можно) указывать язык тагом <HTML LANG=ru, как это было описано выше.
Указание языка внутри HTML документа имеет приоритет над указанием для сервера.
Так как для текстовых (*.txt) документов никак нельзя указать язык внутри документа, указание для сервера — это единственная альтернатива.
Если у вас на сервере стоит Apache/RUS, то рекомендуется отключить всякую автоматическую перекодировку, добавив в .htaccess директиву
CharsetTurnOff On
(работает начиная с версии Apache/RUS PL20).
ПРЕДУПРЕЖДЕНИЕ: в последних версиях Apache обработка файлов .htaccess по умолчанию выключена в главной конфигурации (директивой AllowOverride None), т.е. ваши установки не будут иметь никакого эффекта. В этом случае попросите вебмастера включить такую обработку для вашего каталога, добавив директиву
AllowOverride +FileInfo
в соответствующую секцию <Directory ...> конфигурации Apache.
что NCSA: в каждом каталоге, содержащем ваши странички, заведите файл с именем .htaccess, доступный всем на чтение с такими строчками:
AddType text/html;\ charset=koi8-r .html AddType text/plain;\ charset=koi8-r .txt
Если файл .htaccess уже есть, просто добавьте туда эти строчки.
Подразумевается, что ваши HTML документы заканчиваются на .html; если они заканчиваются на .htm, поменяйте конец строки на .htm соответственно.
что CERN: для каждого вашего каталога с русскими страничками создайте подкаталог .web, в него положите файлы с именами, сконструированными добавлением суффикса .meta к именам в главном каталоге. Каталог .web и файлы в нем должны быть доступны всем на чтение. Например, файлу index.html соответствует файл .web/index.html.meta и т.д. Каждый такой файл должен содержать следующую строчку
Content-Type: text/html; charset=koi8-r
(для HTML файлов) или
Content-Type: text/plain; charset=koi8-r
(для текстовых файлов).
что какой-нибудь другой HTTP сервер: сперва попробуйте связать расширения .html и .txt по аналогии с решениями выше; если вы не знаете, как это сделать в вашем HTTP сервере, вам придётся редактировать непосредственно сами ваши странички: в секцию <HEAD> каждого HTML документа вставьте самой первой директивой следующий таг:
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=koi8-r">
Т.е. каждый ваш документ должен будет выглядеть примерно так:
<HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=koi8-r"> <TITLE>Заголовок странички</TITLE> </HEAD> <BODY> Содержимое странички </BODY>
К сожалению, в этом случае невозможно указание кодировки для текстовых файлов (*.txt).
На этом всё готово. При просмотре ваших страничек никто теперь не увидит мусора из умляутов вместо нормальных русских букв, и не придётся больше выбирать кодировки!
Как проверить, удалось ли проставить кодировку и язык в HTTP заголовке?
Допустим, ваша страничка называется http://www.yourserver.ru/yourpath/yourpage.html
Наберите: telnet www.yourserver.ru 80
После соединения наберите:
HEAD /yourpath/yourpage.html HTTP/1.0
Если ваша страничка находится на виртуальном сервере, то к приведённой выше строчке следует добавить Host: host.ru
Возможно, в некоторых системах придётся набирать вслепую.
Нажмите Enter два раза. Вы увидите HTTP заголовок.
Найдите в нем поле Content-Type и проверьте, что там стоит не просто text/html, а text/html; charset=koi8-r
Если вы на сервере установили русский язык для ваших страничек, в заголовке должно присутствовать поле
Content-Language: ru
А совсем старые версии броузеров не показывают русских букв при таком способе, что делать?
Посоветовать пользователю сменить версию броузера на более новую. В качестве прецедента, вспомните, что было с вводом прогрессивных JPEG, или анимированных GIF? Все поменяли версии на новые, никто не жаловался и не делал две копии страничек, одну с GIFами, а другую — без, а потом предлагал бы их выбрать...
А нельзя сделать так, чтобы 1) старые версии работали, 2) новые версии работали, и 3) чтобы пользователю было удобно?
Нельзя. Из этой тройки можно сделать вместе только два, на выбор. Из-за ненависти к пользователю у нас часто делают (1) чтобы старые версии работали и (2) чтобы новые версии работали (при этом стандартам не соответствует), я же предпочитаю (3) чтобы пользователю было удобно и (2) чтобы новые версии работали (при этом стандартам соответствовало), а вы?