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

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

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

s_gotoW3cHome Інтернаціоналізація
 

Використання екранованих символів в розмітці і 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.