Ускоряющая клавиша n предназначена для пропусков при навигации по страницам. Пропуск для перехода на начало контента.

Данный документ является переводом. В случае каких-либо несоответствий и ошибок последняя версия документа на английском языке должна рассматриваться в качестве официальной. Первоначальное авторское право принадлежит W3C, как то указано ниже.

Переводчик: Alexandr Shlapak (Александр Шлапак)

s_gotoW3cHome Internationalization
 

Использование экранированных символов в разметке и CSS

Предполагаемая аудитория: шифровальщики XHTML / HTML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), и те кто требует руководство в том, как и когда использовать альтернативы современным символам в документе.

Вопрос

Как я могу использовать экранированные символы в разметке и CSS, и когда я должен или не должен их использовать?

Ответ

Какие экранированные символы можно использовать в разметке?

Вы можете использовать экранированные символы для представления любого символа Unicode в XML или (X)HTML используя только ASCII символы.

Различные спецификации дают разные имена для этих конструкций. Например, спецификация HTML5 называет ссылки на комбинацию символов named character references. Мы решили использовать названия для этой статьи, мы надеемся, явно понятные читателю, независимо от изменений, которые они использовали до сих пор.

NCR (числовые ссылки) и ссылки на комбинацию символов являются разновидностями экранированных символов, используемых в разметке. Например, ниже приведены различные способы представления символа U+00A0 NO-BREAK SPACE.

(Символ NO-BREAK SPACE выглядит как пространство, но и предотвращает обтекание строк с обеих сторон между символами. Во Французской он часто используется с такими знаками препинания, как двоеточия и восклицательные знаки, которые предшествуют пространству, но не должны появляться в начале строки при обтекании текстом)

 
Шестнадцатеричные NCR. Все NCR начинаются с &# и заканчиваются ;. x означает, что далее следует шестнадцатеричное число, представляющее точку кода Unicode символа. Шестнадцатеричное число не чувствительно к регистру.
Пример: <p>Vive la France&#xA0;!</p>
&#160;
Десятичные NCR. Используется десятичное число для представления той же точки кода Unicode.
Пример: <p>Vive la France&#160;!</p>
&nbsp;
Ссылки на комбинацию символов. Это совсем другой вид экранированных символов. Ссылки на комбинацию символов определены в языке разметки. Это означает, например, что для HTML только определенный диапазон символов (определяется спецификацией HTML) можно представить в виде ссылок на комбинацию символов (и , что включает в себя лишь небольшую часть диапазона Unicode). Обратите внимание, что название комбинации чувствительно к регистру: в HTML, &Aacute; представляет большую букву Á, в то время как &aacute; представляет маленькую á.
Пример: <p>Vive la France&nbsp;!</p>
Некоторые браузеры позволяют пропускать точку с запятой в конце числовой ссылки, но это не рекомендуется, так как это может привести к проблемам с совместимостью. Использование точки с запятой также позволяет избежать потенциальных проблем в конце экранированного символа становится невидимой, когда экранированный символ вложенный в текст.

Один момент, стоит особо отметить, что значение числовых ссылок (таких, как &#x20AC; или &#8364; для знака евро ) интерпретируются как символы Unicode – независимо от того, какую кодировку вы используете для вашего документа. Это распространенная ошибка людей, работающих с контентом закодированным в Windows code page 1252, например, попытаться представить знак евро используя &#x80;. Это происходит потому, что евро появится на 80 позиции (в шестнадцатеричной системе) в Windows 1252 code page. Используя &#x80; в HTML фактически вы должны создать контролирующий символ, так как экранированный символ будет распространённый как символ на 80 позиции в репертуаре Unicode. (На самом деле, браузеры, как правило, молча исправляют эту ошибку. Смотрите тестовые страницы.)

Экранированные символы CSS

CSS отражает экранированные символы по-другому. Отображения символа начинаются с обратного слеша следом идет шестнадцатеричное число, представляющее точку кода Unicode символа.

Если следующий символ является таким, который не находится в диапазоне A–F, a–f или 0–9, это все, что вам нужно. Следующий пример представляет слово émotion.

Пример: .\E9motion { ... }

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

Пример: .\E9 dition { ... }

Кроме того, вы можете использовать 6-значное шестнадцатеричное число, с пространством или без него. Вот альтернативный способ написания édition.

Пример: .\0000E9dition { ... }

Потому что любые пробелы следующие шестнадцатеричные числа поглощают как часть экранированного символа, если вы действительно хотите, чтобы пространство появилось после экранированного символа вам необходимо добавить два пространства (после шестнадцатеричного числа любой длины).

Обратная слеш также может быть использован в CSS к синтаксису символа, чтобы предотвратить то, чтобы он не читался, как часть кода. Спецификация CSS 2.1.

Когда не следует использовать экранированные символы

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

Использование экранированных символов может привести к тяжести в чтении и поддержке исходного кода, а также может значительно увеличить размер файла.

Много англоязычных разработчиков ожидают того, что другие языки только время от времени будут использовать non-ASCII символы, но это неправильно.

Возьмем для примера следующий отрывок на Чешском языке.

Jako efektivnější se nám jeví pořádání tzv. Road Show prostřednictvím našich autorizovaných dealerů v Čechách a na Moravě, které proběhnou v průběhu září a října.

Если бы вы нуждались в NCR для всех non-ASCII символов, отрывок стал нечитаемым, тяжелым для поддержания и намного длиннее. Конечно, гораздо хуже будет для языка, который вообще не использовал латинские буквы.

Jako efektivn&#x115;j&#x161;&#xED; se n&#xE1;m jev&#xED; po&#x159;&#xE1;d&#xE1;n&#xED; tzv. Road Show prost&#x159;ednictv&#xED;m na&#x161;ich autorizovan&#xFD;ch dealer&#x16F; v &#x10C;ech&#xE1;ch a na Morav&#x11B;, kter&#xE9; prob&#x11B;hnou v pr&#x16F;b&#x11B;hu z&#xE1;&#x159;&#xED; a &#x159;&#xED;jna.

Как мы говорили ранее, используйте для обычного текста обычные символы, а не экранированные.

Использование в XHTML. Использование ссылок на комбинацию символов в документе который распознается как XML может стать проблематичным, если комбинации для вашего документа определяются внешне и инструменты, которые обрабатывают XML не читают внешних файлов. В таких случаях ссылки на комбинации не будут заменены символами. По этой причине, если вам нужно использовать экранированные символы, возможно будет безопаснее использовать числовые ссылки, или определить комбинации символов, которые вам необходимы внутри документа.

Если вы используете Определеные HTML ссылки на комбинации символов (такие как &aacute;) для отображения символов в XHTML, вы должны позаботиться, чтобы все время ваш контент обрабатывался с использованием анализаторов XML или других инструментов.

Когда следует использовать экранированные символы

Синтаксис символов. Есть три символа, которые всегда должны появляться в контенте как экранированные символы, так что они не взаимодействуют с синтаксисом разметки. Это является частью языка для всех документов основанных на XML и для HTML.

Вы также можете представлять кавычки (") как &quot; и одиночные кавычки (') как &apos; – в частности, в атрибуте текста когда вам необходимо использовать тот же тип кавычек, как те, которые окружают значение атрибута. Однако следует отметить, что, хотя они являются частью языка XML , &apos; но не определены в HTML 4.01 и некоторые браузеры не поддерживают &apos; в HTML. По этой причине спецификация XHTML рекомендует вместо них использовать &#39; если текст может быть передан HTML браузеру.

Кодирование пробелов. Экранированные символы могут быть полезными для представления символов, которые не поддерживаются кодированием, которое вы выбрали для документа, например, для отображения Китайских символов в ISO Latin 1 документе. Однако, во-первых, вы должны спросить себя, почему вы не изменили кодировку документа, на ту, что охватывает все символы, которые вам нужны (конечно, такую как UTF-8).

Проблемы подачи. Если ваш инструмент для редактирования не позволяет вам легко ввести необходимые символы, то вы можете использовать экранированные символы. Отметим, что это не долгосрочное решение, если вам нужно ввести много таких символов - это отнимает больше времени и делает обслуживание более тяжелым. В идеале вы должны выбрать инструмент для редактирования, что позволило ввести эти символы как обычные символы. Альтернативно, если вам нужен только случайный символ, используйте инструмент для отображения символов или character picker.

Невидимые или неоднозначные символы. Особенно важная роль для экранированных символов - отображать невидимые или неоднозначные в представлении символы.

Примером может быть символ Unicode 200F: RIGHT-TO-LEFT MARK. Этот символ может быть использован для уточнения направленности в двунаправленном тексте (например, при использовании таких скриптов, как Арабский или Иврит). Он не имеет графической формы, поэтому трудно увидеть, где эти символы в тексте, и если они утеряны или забыты они могут создавать неожиданные результаты в течение последующего редактирования. Использование &rlm; (или его NCR эквивалента &#x200F;) вместо него позволяет очень легко выявить эти символы.

Пример неоднозначного символа 00A0: NO-BREAK SPACE. Этот тип пространства предотвращает разрыв строки, но он выглядит так же, как и любое другое пространство при использовании в качестве символа. Использование &nbsp; (или &#xA0;) позволяет ясно увидеть, где в тексте появляются такие пространства .

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

Лучше всего выбрать правильную кодировку так, чтобы вы могли просто использовать символы в CSS назначениях. Данный раздел ссылается на очень редкие обстоятельства, когда вы, возможно, решите использовать экранированные символы.

Это, как правило, хорошая идея поместить информацию о стиле во внешней таблице стилей или элементе style в XHTML head или HTML файле. Иногда, или, возможно, на временной основе, вы можете использовать атрибут style вместо особого элемента. Еще реже вы захотите отображать один или несколько символов в атрибуте style используя экранированные символы.

Атрибут style в XHTML или HTML может отображать символы используя NCR, комбинации символов или экранированные символы CSS. С другой стороны, элемент style в HTML не может содержать ни NCR ни комбинации символов, и то же относится к внешней таблице стилей.

Потому что есть тенденция к перемещению стилей предназначенных в атрибутах к элементу style или внешней таблице стилей (например, это может быть сделано автоматически, используя приложение или скрипт), безопаснее использовать только экранированные символы CSS.

Например, лучше использовать

<span style="font-family: L\FC beck">...</span>

чем

<span style="font-family: L&#xFC;beck">...</span>

Кстати говоря

Переход на UTF-8 означает, повторное сохранение вашего файла. Использование такого кодирования, как UTF-8 означает, что вы можете избежать необходимости использования большинства экранированных символов и просто работать с символами. Однако, чтобы изменить кодировку документа, не достаточно просто сменить кодировку назначения в верхней части страницы и на сервере. Вам необходимо повторно сохранить ваш документ в этой кодировке. Для получения справки о том, как это сделать с помощью вашего приложения читайте Настройки кодирования в приложениях веб разработки.

Шестнадцатеричная по сравнению с десятичной. Как правило, когда стандарт Unicode ссылается на символы или их перечисляет он использует шестнадцатеричные значения. Например, точка кода для буквы á может приписываться как U+00E1. Учитывая распространенность этой конвенции, часто бывает полезно, хотя и не нужно, использовать шестнадцатеричные числовые значения в экранированных символах, а не десятичные значения. Вам не нужно использовать ведущие нули в экранированных символах, то есть á может быть представлена как &#xE1;.

Дополнительные символы. Дополнительные символы - те символы Unicode, которые имеют точки кода выше, чем у символов в Basic Multilingual Plane (BMP) (Базовая многоязыковая плоскость). В UTF-16 дополнительный символ кодируется с помощью двух 16-bit суррогатных точек кода из BMP. Поэтому, некоторые люди думают, что дополнительные символы должны быть представлены с использованием двух экранированных символов, но это неверно - вы должны использовать одно значение точки кода для того символа. Например, используйте &#x233B4;, а не &#xD84C;&#xDFB4;.

Одиночные амперсанды. Хотя пользовательские приложения HTML, как правило, закрывают глаза, но вы никогда не должны иметь одинарный амперсанд (&) в вашем документе. Вы должны обратить особое внимание на URIs которые включают параметры. Например, документ должен содержать http://example.org/my-script.php?class=guest&amp;name=user, а не http://example.org/my-script.php?class=guest&name=user.

Выскажите своё мнение (по-английски).

Подпишитесь на ленту новостей RSS.

Новые публикации

Новости главной страницы

Twitter (Новости главной страницы)

‎@webi18n

Дополнительные материалы

Автор: Richard Ishida, W3C. Переводчик: Alexandr Shlapak (Александр Шлапак).

Допустимый XHTML 1.0!
Допустимый CSS!
Кодировка UTF-8!

Перевод с английского: 2010-08-12. Последнее внесение изменений в перевод: 2011-05-02 11:00 GMT

Для просмотра истории внесения изменений нажмите qa-escapes в блоге i18n.