Числовая ссылка на символ ( NCR ) — это распространенная конструкция разметки , используемая в языках разметки SGML и производных от SGML, таких как HTML и XML . Она состоит из короткой последовательности символов , которая, в свою очередь, представляет один символ. Начиная с WebSgml , XML и HTML 4 , используются кодовые точки универсального набора символов (UCS) Unicode . NCR обычно используются для представления символов, которые не кодируются напрямую в конкретном документе (например, потому что они являются международными символами, которые не вписываются в используемый 8-битный набор символов , или потому что они имеют особое синтаксическое значение в языке). Когда документ интерпретируется считывателем, поддерживающим разметку, каждый NCR обрабатывается так, как если бы это был символ, который он представляет.
В SGML, HTML и XML все нижеперечисленные символы являются допустимыми числовыми ссылками на греческую заглавную букву сигма.
В SGML, HTML и XML все нижеперечисленные символы являются допустимыми числовыми ссылками на латинскую заглавную букву AE:
В SGML, HTML и XML все нижеперечисленные символы являются допустимыми числовыми ссылками на латинскую строчную букву «диез» (ß).
Список цифровых ссылок на печатные символы ASCII :
Языки разметки обычно определяются в терминах символов UCS или Unicode. То есть документ состоит, на самом фундаментальном уровне абстракции, из последовательности символов, которые являются абстрактными единицами, существующими независимо от какой-либо кодировки .
В идеале, когда символы документа, использующего язык разметки, кодируются для хранения или передачи по сети в виде последовательности битов , используемая кодировка будет поддерживать представление каждого символа в документе, если не во всем Unicode, непосредственно в виде определенной последовательности битов.
Иногда, однако, по соображениям удобства или из-за технических ограничений, документы кодируются с помощью кодировки, которая не может представлять некоторые символы напрямую. Например, широко используемые кодировки на основе ISO 8859 могут представлять только максимум 256 уникальных символов как один 8-битный байт каждый.
На практике редко разрешается использовать более одной внутренней кодировки в документах, поэтому обычно ответственность лежит на языке разметки, который должен предоставить авторам документов средства для выражения некодируемых символов в терминах кодируемых. Обычно это делается с помощью некоторого механизма «экранирования» .
Языки разметки на основе SGML позволяют авторам документов использовать специальные последовательности символов из диапазона ASCII (первые 128 кодовых точек Unicode) для представления или ссылки на любой символ Unicode, независимо от того, доступен ли представленный символ напрямую в кодировке документа. Эти специальные последовательности являются ссылками на символы .
Ссылки на символы, основанные на кодовой точке UCS или Unicode указанного символа, называются числовыми ссылками на символы. В HTML 4 и во всех версиях XHTML и XML кодовая точка может быть выражена как десятичное (основание 10) число или как шестнадцатеричное (основание 16) число. Синтаксис следующий:
Символ U+0026 ( амперсанд ), за которым следует символ U+0023 ( знак номера ), за которым следует один из следующих вариантов:
все сопровождается символом U+003B ( точка с запятой ). Старые версии HTML не допускали шестнадцатеричный синтаксис.
Символы, составляющие числовую ссылку на символ, могут быть представлены в любой кодировке символов, используемой сегодня в вычислительной технике и телекоммуникациях, поэтому нет риска, что сама ссылка окажется некодируемой.
Существует еще один вид ссылки на символ, называемый ссылкой на сущность символа , который позволяет ссылаться на символ по имени, а не по номеру. (Именование символа создает сущность символа .) HTML определяет некоторые сущности символа, но не многие; все остальные символы могут быть включены только путем прямого кодирования или с использованием NCR.
Универсальный набор символов, определенный стандартом ISO 10646, представляет собой «набор символов документа» SGML, HTML 4, поэтому по умолчанию любой символ в таком документе и любой символ, на который в таком документе есть ссылка , должен быть в UCS.
Хотя синтаксис SGML не запрещает ссылки на недействительные или неназначенные кодовые точки, такие как 
, производные от SGML языки разметки, такие как HTML и XML, могут ограничивать ссылки на числовые символы только теми кодовыми точками, которые назначены символам, и часто так и делают.
Ограничения могут применяться и по другим причинам. Например, в HTML 4, 
, который является ссылкой на непечатаемый управляющий символ «form feed», разрешен, поскольку разрешен символ form feed. Но в XML символ form feed не может использоваться, даже по ссылке. [1] [ необходима цитата ] В качестве другого примера, €
, который является ссылкой на другой управляющий символ, не допускается к использованию или ссылке ни в HTML, ни в XML, но при использовании в HTML он обычно не помечается как ошибка веб-браузерами – некоторые из них интерпретируют его как ссылку на символ, представленный кодовым значением 128 в кодировке Windows-1252 по соображениям совместимости. Этот символ, «€», должен быть представлен как €
в HTML-коде, совместимом со стандартом. В качестве еще одного примера, до публикации XML 1.0 Second Edition 6 октября 2000 года, XML 1.0 был основан на старой версии ISO 10646 и запрещал использование символов выше U+FFFD, за исключением символьных данных, таким образом делая ссылку типа 𐀀
(U+10000) незаконной. В XML 1.1 и более новых редакциях XML 1.0 такая ссылка разрешена, поскольку доступный репертуар символов был явно расширен.
Языки разметки также накладывают ограничения на то, где могут встречаться ссылки на символы.
В начальных версиях SGML и HTML числовые ссылки на символы интерпретировались в зависимости от кодировки символов документа, а не Unicode . Для документов с латинским алфавитом числовые ссылки на символы между x80 и x9F в этих документах не будут корректными по отношению к Unicode и должны быть перекодированы. Стандарты HTML до HTML 4 поддерживали только документы с западным латинским алфавитом: обработка ссылок на символы выше #7F может различаться в зависимости от приложений и национальных соглашений.
Например, как упоминалось выше, правильная цифровая ссылка на символ для знака евро "€" U+20AC
при использовании Unicode — это десятичный €
и шестнадцатеричный €
. Однако при использовании инструментов, поддерживающих устаревшие реализации HTML, ссылка €
(знак евро в кодовой странице CP-1252 ) или ¤
(знак евро в ISO/IEC 8859-15 ) может работать.
В качестве другого примера, если какой-либо текст изначально был создан с использованием набора символов MacRoman , левая двойная кавычка " будет представлена с кодовой точкой xD2. Это не будет правильно отображаться в системе, ожидающей документ в кодировке UTF-8, ISO 8859-1 или CP-1252, где эта кодовая точка занята буквой Ò . Правильная числовая ссылка на символ для " в HTML 4 и новее — “
, поскольку U+ 201C — это его код UCS. В некоторых системах также может быть доступна именованная ссылка на символ “
.