HTML, XHTML, XML та Керуючі Коди

Питання

Як працювати з керуючими кодами (тобто 'C0' U+0000-U+001F та 'C1' U+007F-U+009F діапазони) в XML, XHTML та HTML?

Застарілі програми іноді створюють дані, що відображають керуючі коди. Тому іноді може бути важливим зрозуміти, як підтримуються контрольні коди в мовах розмітки, при перенесенні таких додатків або їхніх даних в Інтернет.

Є два діапазони Unicode Character Set (Набору Символів), що призначені як керуючі коди. Стандарт Unicode не дозволяє особливого використання цих керуючих кодів і залишає їх визначення для додатку. Якщо програма не визначає їх використання, то вони повинні бути інтерпретовані відповідно до семантики ISO/IEC 6429. Більшість з вас дізнаються чимало з 6429 керуючих кодів: ACK, NAK, BEL, LF, FF, VT, CR, та інші. ISO 8859 та інші символьні стандарти базують свої керуючі коди на стандарті ISO 6429.

Керуючі коди в діапазоні U+0000-U+001F відомі як "C0" діапазон. Цей діапазон починається з NUL (Null) U+0000. Керуючі коди в діапазоні U+0080-U+009F відомі як "C1" діапазон. DEL (Delete) U+007F також керуючий код і примикає до початку Діапазону C1.

Відповідь

Обробка керуючих кодів

Керуючі коди повинні бути замінені на відповідну розмітку. Оскільки XML забезпечує стандартний спосіб кодування структурованих даних, при представленні керуючих кодів відмінних від розмітки будуть скасовані фактичні переваги використання XML. Не потрібно використовувати керуючі коди в HTML та XHTML, так як ці мови розмітки створені для представлення тексту, а не даних. Така інформація повинна знадобитися лише в одному рідкісному випадку, коли застарілі дані, які містять керуючі коди не можна очистити.

Якщо дані в дійсності не текстові, а бінарні, то більш практичним може бути, закодувати їх, наприклад, з використанням base64 (позиційна система числення з основою 64) або шістнадцяткових значень, для забезпечення використання тільки підтримуваних символів в тексті мови розмітки. (І, звичайно, декодування тексту при читанні файлів.) Зверніть увагу, що Схема XML забезпечує типи даних для цих кодувань.

Інша альтернатива - зберігати дані у зовнішньому документі і посилатися на нього з документа XML.

Якщо вам необхідно представити контрольний код в XML 1.1, то явно найпростішою альтернативою є використання NCR (числове посилання). Наприклад, керуючий код ESC (Escape) U+001B буде представлений або  (шістнадцятковими) або  (десятковими) Числовими Посиланнями.

Підтримка керуючих кодів

Нижче наводиться таблиця, що підсумовує які мови розмітки підтримують керуючі коди:

Керуючі коди Діапазон HTML 4 XHTML 1.0 XML 1.0 XML 1.1
C0, за винятком HT, LF, CR U+0000 (NUL) Не дозволено Не дозволено Не дозволено Не дозволено
U+0001-U+001F Не дозволено Не дозволено Не дозволено NCR
HT, LF, CR U+0009, U+000A, U+000D Підтримується Підтримується Підтримується Підтримується
DEL + C1 U+007F-U+009F Не дозволено Не дозволено Підтримується NCR
NEL U+0085 Не дозволено Не дозволено (допускається) Підтримується

Доречі

У той час як ISO 8859 зарезервувала діапазон C1 для керуючих кодів, набори символів Microsoft (наприклад 1250-1258) поставили символи у цей діапазон. Іноді автори контенту помилково використовують code points (місця коду) символів Microsoft при створенні NCRs замість того, щоб використовувати значення Unicode. Через поширеність даної помилки, багато браузери відображають символи Microsoft у цьому діапазоні. Це некоректна поведінка і в подальшому вводить розробника в оману неправильним підтвердженням помилкового значення. В кінцевому підсумку проблему можна виявити, коли дані обробляються деякими програмами, або коли відповідаючий стандартам браузер не може відобразити призначений символ.