Свойство Content-Type
Свойство Content-type (Тип содержимого) служит для указания типов содержимого (типов MIME), к которым относятся «text/html», «image/png», «image/gif», «video/mpeg», «audio/basic», «text/tcl», «text/javascript» и «text/vbscript» (с учетом регистра). Текущий список зарегистрированных типов MIME можно найти по адресу ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/. Тип содержимого «text/css», хотя он и не зарегистрирован, используется для иерархических, или каскадных, таблиц стилей (CSS).
Тип документа "text/html" дополнительно расширяется указанием кодировки страницы charset (набор символов) – тогда браузер выводит ее сразу в заданной кодировке. Однако обратите внимание: если текст документа написан в windows-1251, а значение указано charset=K0I8-r, то изменить кодировку в браузере невозможно и текст совершенно не читается.
Формат метатэга следующий (для типа содержимого "text/html" и набора символов windows-1251):
<META HTTP-EQUIV="Content-type" C0NTENT="text/html; charset= windows-1251">
Немного о кодировках
Кодировка представляет собой таблицу, где каждому символу – буквам алфавита, цифрам и специальным знакам – соответствует свой уникальный номер, код символа.
Полностью стандартизирована лишь первая часть таблицы, так называемый ASCII-код – первые 128 символов, включающих цифры и буквы латинского алфавита. Поэтому с ними никогда не бывает проблем. Вторая же часть таблицы (всего в ней 256 символов – по числу состояний, которые может принять один байт) отведена под специальные символы. Она используется для кодировки символов национальных алфавитов, причем для каждого языка и в каждой стране она различна. При этом для букв русского языка создано пять различных кодировок, то есть одному символу соответствуют разные цифровые коды. Таким образом, при неправильной кодировке мы получим совершенно нечитаемый текст.
На заре развития вычислительной техники очень широко использовалась кодировка с кириллицей KOI-8. Она появилась в семидесятые годы при адаптации операционной системы UNIX к русскому языку – персональных компьютеров тогда еще не было. KOI-8 – до сих пор основная кодировка в UNIX. Потом началось победное шествие персональных компьютеров IBM, а с ними – операционных систем MS DOS, имевших DOS-кодировку (или кодовую страницу 866). Параллельно развивались компьютеры Macintosh, и, разумеется, была придумана еще одна кодировка – MAC. Наконец, с появлением операционной системы Microsoft Windows появилась и новая windows-кодировка (кодовая страница 1251). Она-то и стала самой распространенной в России.
Еще один вариант связан с попытками стандартизации кодировок на уровне всей планеты. Разработчики из ISO, международной организации по стандартам, создали еще одну кодировку и назвали ее ISO-8859-5. В настоящее время она практически не применяется (по-видимому, ее используют лишь в базе данных Oracle), однако поддержка данной кодировки предусмотрена во всех браузерах.
В настоящее время создана универсальная кодировка UNICODE, в которую вошли все языки мира, поэтому на каждый символ в ней отведено по два байта. Таким образом, максимальное число знаков в таблице расширилось до 65 535. Сейчас UNICODE находит свое применение, но пока не слишком широкое.
Правильное отображение символов национальных алфавитов касается как Web-серверов, так и браузеров. Они должны осуществлять информационный обмен на одном языке и в одной кодировке, и только в этом случае сообщения будут доступны.
Сервер должен иметь эффективную систему предварительного оповещения о том, в какой кодировке будет прислана страница. Клиентской программе (браузеру) необходимо принять такое сообщение и, соответственно, настроиться на нужное отображение. Если все сделать правильно, то никаких трудностей не возникнет. Однако при некорректной настройке Web-сервера он сообщает об одной кодировке (например, windows-1251), а страницу пересылает в другой (например, в KOI-8). Пользуясь указаниями сервера, браузер, естественно, ошибается и отображает страницу неверно.
Как показано выше, можно задать кодировку документа не на сервере, а непосредственно в HTML-коде – с помощью метатэга со свойством Content-type. Но не все так просто. В России распространен способ, при котором сервер автоматически определяет, в какой кодировке приходит запрос от клиента, и пересылает страницу Web-браузеру уже перекодированной. Вот тут-то использование указанного метатэга и может сыграть с вами злую шутку. Дело в том, что указания на странице имеют приоритет над командами, присылаемыми Web-сервером, и, правильно перекодировав страницу, сервер не может изменить содержимое метатэга. Происходит несовпадение реальной кодировки, в которой пришел документ, и указаний в тэге META. Такую страницу нельзя будет нормально просмотреть и перекодировать средствами браузера. Выбор кодировки вручную в данном случае не поможет, так как метатэг имеет приоритет и над установками браузера. Единственный способ прочитать документ – это сохранить страницу и удалить злосчастный тэг.