Элемент <head>. Кодировка символов
Дата публикации: 12.03.2011
Первым дочерним элементом для корневого обычно является <head>. Элемент <head> содержит метаданные — информацию о странице, а не содержимое самой страницы (содержимое страницы заключено в элемент <body>). Сам <head> довольно скучный элемент и в HTML5 он почти не изменился. Полезные изменения коснулись содержимого этого элемента. Рассмотрим следующий код:
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>My Weblog</title> <link rel="stylesheet" type="text/css" href="style-original.css" /> <link rel="alternate" type="application/atom+xml" title="My Weblog feed" href="/feed/" /> <link rel="search" type="application/opensearchdescription+xml" title="My Weblog search" href="opensearch.xml" /> <link rel="shortcut icon" href="/favicon.ico" /> </head>
Сначала элемент <meta>:
Кодировка символов
Когда мы говорим «текст», то чаще всего представляем его как набор символов на экране монитора. Но компьютеры не имеют дела с символами, они работают с битами и байтами. Любой кусок текста, представленный на экране хранится в виде символьной кодировки. Существует множество кодировок. Одни оптимизированы под конкретные языки (например, русский, китайский, английский), другие — сразу для нескольких языков. Грубо говоря, кодировка обеспечивает соответствие того, что ты видишь на экране, с тем, что хранится в памяти компьютера.
В действительности, все намного сложнее. Многие символы являются общими для разных кодировок, но при этом будут отличаться последовательностью байтов (кодом), которая хранится в памяти компьютера и отвечает за этот символ. Кодировку можно представить, как ключ, который требуется для расшифровки текста. Всякий раз, когда кто-то присылает тебе последовательность байт и утверждает что это текст, ты должен знать какую кодировку применить, чтобы правильно отобразить или обработать его.
Итак, как же браузер определяет, в какой кодировке пришла ему последовательность байт? Я рад, что ты задал этот вопрос. Если ты знаком с HTTP заголовками, то ты уже встречал что-то типа этого:
Content-Type: text/html; charset="utf-8"
Если кратко, то таким заголовком сервер сообщает, что он отправил HTML документ, в котором используется кодировка utf-8. К сожалению или к радости, но немногие авторы имеют доступ к своим HTTP серверам. Например, Blogger: контент пишут миллионы отдельных лиц, а сервера принадлежат Google. Поэтому разработчики HTML4 приняли решение, что HTML документ будет содержать информацию о кодировке непосредственно внутри себя. Наверное, такая строка тебе знакома:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Такой код говорит, что автор считает, что содержимое его документа использует кодировку utf-8.
Оба метода все еще работают. HTTP-заголовок является более предпочтительным, он перекрывает мата тег. Но не каждый может установить HTTP-заголовок, поэтому мета тег все еще жив. В HTML5 он просто стал короче:
<meta charset="utf-8" />
Это работает во всех браузерах.
Да, кстати, кавычки не обязательны:
<meta charset=utf-8 />
Браузеры давно уже привыкли к игнорированию авторами кавычек в мета тегах.
В: Я никогда не использую необычные символы, вроде смайлов. Обязательно ли мне указывать кодировку?
О: Да! Кодировку следует указывать всегда на всех страницах. Не указав ее, можно получить уязвимость в безопасности.
Подведем итог: кодировки — это сложно. И это не было реализовано просто из-за многих поколений плохо написанного кода. Ты всегда должен указывать кодировку на всех своих HTML страницах иначе можно нарваться на неприятности. Задашь ты ее с указанием Content-Type или воспользуешься более короткой записью — решать тебе. Но обязательно укажи кодировку. Веб будет тебе благодарен.
Куда дальше
- следующая — Элемент <head>. Дружеские отношения
- предыдущая — Корневой элемент
- содержание