Кодировки символов в HTML

редактировать
Использование систем кодировки для международных символов в HTML

HTML (язык гипертекстовой разметки) уже использовался с 1991 г., но HTML 4.0 (декабрь 1997 г.) был первой стандартизированной версией, в которой международные символы получили достаточно полную обработку. Когда HTML-документ содержит специальные символы, выходящие за пределы семибитного ASCII, следует учитывать две цели: целостность информации и универсальное отображение браузера.

Содержание
  • 1 Указание кодировки символов документа
  • 2 Разрешенные кодировки
  • 3 Ссылки на символы
    • 3.1 Ссылки на символы HTML
    • 3.2 Ссылки на символы XML
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Указание кодировки символов документа

Существует несколько способов указать, какая кодировка символов используется в документе. Во-первых, веб-сервер может включать кодировку символов или «charset» в заголовок Hypertext Transfer Protocol (HTTP) Content-Type., который обычно выглядит так:

Content-Type: text / html; charset = ISO-8859-4

Этот метод дает HTTP-серверу удобный способ изменить кодировку документа в соответствии с согласованием содержимого ; определенное программное обеспечение HTTP-сервера может это сделать, например Apache с модулем module mod_charset_lite.

Для HTML можно включить эту информацию в элемент headв верхней части документ:

HTML5 также позволяет следующему синтаксису означать то же самое:

документы XHTML имеют третий вариант: выражать кодировку символов через объявление XML, как следует:

Поскольку кодировка символов не может быть известна до тех пор, пока это объявление не будет проанализировано, может возникнуть проблема, зная, какая кодировка используется для самого объявления. Главный принцип заключается в том, что объявление должно быть закодировано в чистом ASCII, и поэтому (если объявление находится внутри файла) кодировка должна быть расширением ASCII. Чтобы кодировки не были обратно совместимы с ASCII, браузеры должны иметь возможность анализировать объявления в таких кодировках. Примеры таких кодировок: UTF-16BE и UTF-16LE.

Начиная с HTML5, рекомендуемая кодировка - UTF-8. «Алгоритм прослушивания кодирования» определен в спецификации для определения кодировки символов документа на основе нескольких источников ввода, включая:

  1. Явная инструкция пользователя
  2. Явный метатег в первых 1024 байтах документ
  3. A Метка порядка байтов в первых трех байтах документа
  4. Тип содержимого HTTP или другая информация транспортного уровня
  5. Анализ байтов документа в поисках конкретных последовательностей или диапазоны значений байтов, и другие механизмы предварительного обнаружения.

Для кодировок символов, совместимых с ASCII, следствием неправильного выбора является то, что символы вне печатаемого диапазона ASCII (от 32 до 126) обычно отображаются неправильно. Это создает несколько проблем для англоговорящих пользователей, но для других языков обычно - в некоторых случаях всегда - требуются символы вне этого диапазона. В средах CJK, где используется несколько различных многобайтовых кодировок, также часто используется автоопределение. Наконец, браузеры обычно позволяют пользователю вручную переопределить неправильную метку кодировки.

Для многоязычных веб-сайтов и веб-сайтов на незападных языках все чаще используется UTF-8, что позволяет использовать одну и ту же кодировку для всех языков. UTF-16 или UTF-32, которые также могут использоваться для всех языков, менее широко используются, поскольку их труднее обрабатывать в языках программирования, которые предполагают байт-ориентированная кодировка расширенного набора ASCII, и они менее эффективны для текста с высокой частотой символов ASCII, что обычно имеет место для документов HTML.

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

Разрешенные кодировки

Стандарт кодирования WHATWG, на который ссылаются последние стандарты HTML (текущий WHATWG HTML Living Standard, а также ранее конкурирующий W3C HTML 5.0 и 5.1) определяет список кодировок, которые браузеры должны поддерживать. Стандарты HTML запрещают поддержку других кодировок. Стандарт кодирования также предусматривает, что новые форматы, новые протоколы (даже когда используются существующие форматы) и авторы новых документов должны использовать UTF-8 исключительно.

Помимо UTF-8, следующие кодировки явно перечислены в самом стандарте HTML со ссылкой на Стандарт кодирования:

Следующие дополнительные кодировки перечислены в Стандарте кодирования, и поэтому также требуется их поддержка:

Следующие кодировки указаны как явные примеры запрещенных кодировок:

Стандарт также определяет «замещающий» декодер, который отображает весь контент, помеченный как определенные кодировки, на замещающий символ (), отказываясь обрабатывать его вообще. Это предназначено для предотвращения атак (например, межсайтовый скриптинг ), которые могут использовать разницу между клиентом и сервером в том, какие кодировки поддерживаются, чтобы замаскировать вредоносный контент. Хотя та же проблема безопасности применяется к ISO-2022-JP и UTF-16, которые также позволяют по-разному интерпретировать последовательности байтов ASCII, этот подход не рассматривался как выполнимый для них. поскольку они сравнительно чаще используются в развернутом контенте. Следующие кодировки обрабатываются так:

Ссылки на символы

Помимо собственных кодировок символов, символы также могут быть закодированы как ссылки на символы, которые могут быть ссылками на числовые символы (десятичное или шестнадцатеричное ) или ссылками на символьные сущности. Ссылки на символьные сущности также иногда называют именованными сущностями или сущностями HTML для HTML. Использование символьных ссылок в HTML происходит от SGML.

HTML-символьных ссылок

Цифровая символьная ссылка в HTML ссылается на символ по его универсальному набору символов / Unicode и использует формат

# nnnn;

или

# xhhhh;

, где nnnn - кодовая точка в десятичной форме, а hhhh - это кодовая точка в шестнадцатеричной форме. В XML-документах x должен быть в нижнем регистре. Nnnn или hhhh могут быть любым количеством цифр и могут включать в себя ведущие нули. В hhhh могут смешиваться прописные и строчные буквы, хотя прописные буквы являются обычным стилем.

Не все веб-браузеры или почтовые клиенты, используемые получателями документов HTML или используемые авторами документов HTML, смогут отображать все символы HTML. Большинство современных программ способно отображать большинство или все символы языка пользователя, а также рисовать прямоугольник или другой четкий индикатор для символов, которые они не могут отобразить.

Для кодов от 0 до 127, исходного 7-битного стандартного набора ASCII, большинство этих символов можно использовать без ссылки на символ. Все коды от 160 до 255 могут быть созданы с использованием символьных имен сущностей. Только несколько кодов с более высокими номерами могут быть созданы с использованием имен сущностей, но все они могут быть созданы с помощью ссылки на символ десятичного числа.

Символьные ссылки на сущности также могут иметь формат name;, где name - это буквенно-цифровая строка с учетом регистра. Например, «λ» также может быть закодировано как λв документе HTML. Ссылки на символьные сущности <, >, "и предопределены в HTML и SGML, поскольку <, >, "и уже используются для разграничения разметки. Это, в частности, не включало XML-объект '(') до HTML5. Для списка всех именованных ссылок на символы HTML вместе с версии, в которых они были представлены, см. Список ссылок на символы XML и HTML.

Излишнее использование ссылок на символы HTML может значительно снизить удобочитаемость HTML. Если кодировка символов для веб-страницы выбрана надлежащим образом, то символ HTML ссылки обычно требуются только для символов-разделителей разметки, как указано выше, и для нескольких специальных символов (или вообще не требуются, если используется собственная кодировка Unicode, такая как UTF-8 ). Неверно. Экранирование HTML-объекта может также открыть уязвимости безопасности для атак путем внедрения, таких как межсайтовый скриптинг. Если атрибуты HTML не заключены в кавычки, некоторые символы, большинство Разумеется, пробел, например пробел и табуляция, необходимо экранировать с помощью сущностей. В других языках, связанных с HTML, есть собственные методы экранирования символов.

Символьные ссылки XML

В отличие от традиционного HTML с его большим диапазоном ссылок на символьные сущности, в XML есть только пять предопределенных символьных ссылок на сущности. Они используются для экранирования символов, чувствительных к разметке в определенных контекстах:

  • → (амперсанд, U + 0026)
  • <→ < (less-than sign, U+003C)
  • >→>( знак "больше", U + 003E)
  • "→" (кавычка, U + 0022)
  • '→' (апостроф, U + 0027)

Ссылки на все остальные символы должны быть определены до того, как их можно будет использовать. Например, использование é(которое дает é, латинскую строчную букву E с острым ударением, U + 00E9 в Unicode) в XML-документе вызовет ошибку, если объект еще не определен. XML также требует, чтобы xв шестнадцатеричных числовых ссылках был в нижнем регистре: например, , а не . XHTML, приложение XML, поддерживает набор сущностей HTML вместе с предопределенными сущностями XML.

См. Также
Ссылки
Внешние ссылки

Последняя правка сделана 2021-05-14 06:08:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте