Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Указание кодировки символов документа [ править ]

Есть несколько способов указать, какая кодировка символов используется в документе. Во-первых, веб-сервер может включать кодировку символов или " charset" в заголовок протокола передачи гипертекста (HTTP) Content-Type, который обычно выглядит следующим образом: [1]

Тип содержимого: текст / html; кодировка = ISO-8859-4

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

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

< meta  http-Equiv = "Content-Type"  content = "text / html; charset = utf-8" >

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

< meta  charset = "utf-8" >

У документов XHTML есть третий вариант: выразить кодировку символов через объявление XML следующим образом: [4]

<? xml version = "1.0" encoding = "ISO-8859-1"?>

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

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

  1. Явная инструкция пользователя
  2. Явный метатег в первых 1024 байтах документа.
  3. Отметка порядка байтов в течение первых трех байтов документа
  4. HTTP Content-Type или другая информация транспортного уровня.
  5. Анализ байтов документа в поисках конкретных последовательностей или диапазонов значений байтов [5] и другие механизмы предварительного обнаружения.

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

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

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

Разрешенные кодировки [ править ]

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

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

  • ISO-8859-2
  • ISO-8859-7
  • ISO-8859-8
  • Windows-874 [а]
  • Окна-1250
  • Окна-1251
  • Windows-1252 [b]
  • Окна-1254 [c]
  • Окна-1255
  • Окна-1256
  • Окна-1257
  • Окна-1258
  • GB18030 [d]
  • Big5 [e]
  • Shift JIS [f]
  • ISO-2022-JP [г]
  • EUC-KR [ч]
  • UTF-16BE [i]
  • UTF-16LE [j]
  • x-определяемый пользователем [k]
  1. ^ Кромеуказанный дляTIS-620,ISO-8859-11и связанныхними меток. [9]
  2. ^ Кромеуказанный дляASCII,ISO-8859-1и связанныхними меток. [9]
  3. ^ Также указано дляISO-8859-9и связанных этикеток. [9]
  4. ^ Указывается с помощью 0xA3A0 как дублирующая кодировка идеографического пространства (U + 3000) по соображениям совместимости и, как таковая, за исключением U + E5E5 (символ частного использования). [10] [11] Кроме того, указанное с помощью 0x80 принимается в качестве альтернативной кодировки знака евро (U + 20AC; см. Windows-936 ). [12] В противном случае следует сопоставлениям из стандарта 2005 года. [11]
  5. ^ Гонконгский вариант дополнительного набора символов , хотя большинство расширений HKSCS (с ведущими байтами меньше 0xA1) не включаются кодером, только декодером. [13]
  6. ^ Спецификация включаетрасширения IBM и NEC (см. Windows-31J ). [14]
  7. ^ В спецификации используется тот же индекс, что и для Shift JIS (насколько это возможно), т. Е. Включает расширения NEC. Кана половинной ширины преобразуется кодером [15] в полную ширину,но принимается декодером с использованием управляющей последовательности (ESC 0x28 0x49). [16] Shift Out и Shift In (0x0E и 0x0F) полностью исключены для предотвращения атак. [16] [17]
  8. ^ Фактически Unified Hangul Code , который представляет собой надмножество, которое охватывает весьблок Hangul Syllables . [18]
  9. ^ Предназначен только для декодирования; отправка форм из документов в кодировке UTF-16 должна быть закодирована в UTF-8 . [19]
  10. ^ Для совместимости с развернутым контентом, также указанным для простойUTF-16метки [20], хотя метка порядка байтов , если присутствует, имеет приоритет над любой меткой. [21] Предназначен только для декодирования; отправка форм из документов в кодировке UTF-16 должна быть закодирована в UTF-8 . [19]
  11. ^ Сопоставляет 0x00 через 0x7F с U + 0000 через U + 007F и от 0x80 через 0xFF до U + F780 через U + F7FF (диапазон области частного использования ), так что младшие 8 бит кодовой точки всегда соответствуют исходному байту. [22]

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

  • Кодовая страница 866
  • ISO-8859-3
  • ISO-8859-4
  • ISO-8859-5
  • ISO-8859-6
  • ISO-8859-8- I [a]
  • ISO-8859-10
  • ISO-8859-13
  • ISO-8859-14
  • ISO-8859-15
  • ISO-8859-16
  • КОИ8-Р
  • КОИ8-У / КОИ8-РУ [б]
  • Mac OS Роман
  • Окна-1253
  • Mac OS кириллица
  • GBK [c]
  • EUC-JP [d]
  1. ^ Использует тот же кодировщик и декодер, что и ISO-8859-8, но не подчиняется поведению визуального порядка, которое используется для документов, помеченных как ISO-8859-8. [23]
  2. ^ Названный KOI8-U и указаны для обоихKOI8-UиKOI8-RUэтикетками, [9] , но следует KOI8-RU (т.е. включает Ў / ў ). [24]
  3. ^ Также указано дляGB2312и связанных этикеток. Для декодирования обрабатывается так же, как GB18030. [25] Для целей кодирования маркировка как GBK (или GB2312) исключает четырехбайтовые коды и отдает предпочтение однобайтовому представлению 0x80 для U + 20AC. [10]
  4. ^ В спецификации используется тот же индекс, что и для Shift JIS (насколько он находится в пределах досягаемости набора кодов EUC 1), т. Е. Включает расширения NEC. JIS X 0212 включен только для декодирования. [26]

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

  • ЦЭСУ-8
  • UTF-7
  • BOCU-1
  • ГКГУ
  • EBCDIC
  • UTF-32

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

  • ISO-2022-KR
  • ISO-2022-CN
  • ISO-2022-CN-EXT
  • HZ-GB-2312

Ссылки на персонажей [ править ]

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

Ссылки на символы HTML [ править ]

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

&#nnnn;

или же

&#xhhhh;

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

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

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

Ссылки на символьные сущности также могут иметь формат, в котором имя является чувствительной к регистру буквенно-цифровой строкой. Например, «λ» можно также закодировать, как в документе HTML. Упоминания характер сущности , , и предопределены в HTML и SGML, потому что , , и уже используются для разделения разметки. В частности, это не включало сущность XML (') до HTML5 . Список всех названных ссылок на символьные сущности HTML вместе с версиями, в которых они были представлены, см. В разделе Список ссылок на символьные сущности XML и HTML .&name;&lambda;&lt;&gt;&quot;&amp;<>"&&apos;

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

Ссылки на символы XML [ править ]

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

  • &amp; → & ( амперсанд , U + 0026)
  • &lt; → <(знак «меньше», U + 003C)
  • &gt; →> (знак больше, U + 003E)
  • &quot; → "(кавычка, U + 0022)
  • &apos; → '(апостроф, U + 0027)

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

См. Также [ править ]

  • Анализ кодировки - используется многими браузерами, когда метаданные кодировки символов недоступны.
  • Юникод и HTML
  • Код языка
  • Список ссылок на символьные сущности XML и HTML

Ссылки [ править ]

  1. ^ "Content-Type", Протокол передачи гипертекста (HTTP / 1.1): семантика и контент , IETF , июнь 2014 г. , получено 30 июля 2014 г.
  2. ^ Модуль Apache mod_charset_lite
  3. ^ a b c «Указание кодировки символов документа», HTML5 , World Wide Web Consortium , 14 декабря 2017 г. , получено 28 мая 2018 г.
  4. ^ Брей, Т .; Paoli, J .; Сперберг-Маккуин, К .; Maler, E .; Yergeau, F. (26 ноября 2008 г.), «Объявление типа пролога и документа», XML , W3C , получено 8 марта 2010 г.
  5. ^ HTML5 предварительно просматривает поток байтов, чтобы определить его кодировку
  6. ^ «8.2.2.3. Кодировки символов» . Стандарт HTML 5.1 . W3C.
  7. ^ «8.2.2.3. Кодировки символов» . Стандарт HTML 5 . W3C.
  8. ^ a b c «12.2.3.3 Кодировки символов» . Уровень жизни HTML . WHATWG.
  9. ^ a b c d e f ван Кестерен, Энн . «4.2: Имена и ярлыки» . Стандарт кодирования . WHATWG .
  10. ^ a b van Kesteren, Энн . «10.2.2. Энкодер gb18030» . Стандарт кодирования . WHATWG .
  11. ^ a b van Kesteren, Энн . «5. Указатели (§ индекс gb18030)» . Стандарт кодирования . WHATWG .
  12. ^ ван Кестерен, Энн . «10.2.1. Декодер gb18030» . Стандарт кодирования . WHATWG .
  13. ^ ван Кестерен, Энн . «5. Индексы (§ указатель Big5 index)» . Стандарт кодирования . WHATWG .
  14. ^ ван Кестерен, Энн . «5. Указатели (§ Указатель jis0208)» . Стандарт кодирования . WHATWG .
  15. ^ ван Кестерен, Энн . «5. Указатели (§ Указатель ISO-2022-JP katakana)» . Стандарт кодирования . WHATWG .
  16. ^ a b van Kesteren, Энн . «12.2.1. Декодер ISO-2022-JP» . Стандарт кодирования . WHATWG .
  17. ^ ван Кестерен, Энн . «12.2.2. Кодировщик ISO-2022-JP» . Стандарт кодирования . WHATWG .
  18. ^ ван Кестерен, Энн . «5. Индексы (§ индекс EUC-KR)» . Стандарт кодирования . WHATWG .
  19. ^ a b van Kesteren, Энн . «4.3. Выходные кодировки» . Стандарт кодирования . WHATWG .
  20. ^ ван Кестерен, Энн . «14.4. UTF-16LE» . Стандарт кодирования . WHATWG .
  21. ^ ван Кестерен, Энн . «6. Крючки для стандартов (§ декодирование)» . Стандарт кодирования . WHATWG .
  22. ^ ван Кестерен, Энн . "14.5. X-определяемый пользователем" . Стандарт кодирования . WHATWG .
  23. ^ ван Кестерен, Энн . «9. Устаревшие однобайтовые кодировки (§ Примечание)» . Стандарт кодирования . WHATWG .
  24. ^ ван Кестерен, Энн . «указатель КОИ8-У визуализации» . Стандарт кодирования . WHATWG .
  25. ^ ван Кестерен, Энн . «10.1. ГБК» . Стандарт кодирования . WHATWG .
  26. ^ ван Кестерен, Энн . «5. Указатели (§ Указатель jis0212)» . Стандарт кодирования . WHATWG .
  27. ^ ван Кестерен, Энн . «14.1: замена» . Стандарт кодирования . WHATWG .
  28. ^ ван Кестерен, Энн . «2: Фон безопасности» . Стандарт кодирования . WHATWG .
  29. ^ ван Кестерен, Энн . «4.2: Имена и ярлыки (§ замена)» . Стандарт кодирования . WHATWG .
  30. ^ Брей, Т .; Paoli, J .; Сперберг-Маккуин, К .; Maler, E .; Yergeau, F. (26 ноября 2008 г.), «Ссылки на символы и сущности», XML , W3C , получено 8 марта 2010 г.

Внешние ссылки [ править ]

  • Инструмент для кодирования и декодирования HTML-сущностей онлайн
  • Ссылки на символьные сущности в HTML4
  • Полное руководство по кодированию веб-символов
  • Глава HTML Entity Encoding в Руководстве по безопасности браузера - дополнительная информация о текущих браузерах и работе с ними.
  • Вики-статья проекта Open Web Application Security Project о межсайтовых сценариях (XSS)