Каковы самые длинные и короткие имена сущностей символов HTML?
Вокруг трубок миллионы шпаргалок, которые на разных уровнях охватывают объекты символов, определенные в различных версиях и спецификациях HTML. Я не хочу доверять каким-либо конкретным из них, поэтому я решил, что я брошу это здесь и посмотрю, не отправит ли кто-нибудь более авторитетный ответ.
Итак, давайте предположим, что я хочу сопоставить любые и все символьные ссылки и сущности с помощью регулярного выражения. Я бы начал с /&(?:#(?:x[0-9a-f]+|[0-9]+)|[a-z]{???,???});/i
, Но что бы вошло в ???
s? Я могу думать о сущностях длиной в два символа, например lt
а также gt
, но есть ли однобуквенные сущности в каких-либо спецификациях HTML? Точно так же, какая самая длинная сущность? Наконец, это единственные три синтаксиса для выражения буквенных символов в HTML, кроме простого их непосредственного ввода, не так ли?
Ура!
3 ответа
Самый длинный в HTML5 ∳
и нет однобуквенных имен.
Но обратите внимание, что ссылки на именованные объекты не работают так, как вы думаете. Некоторые именованные ссылки на символы не заканчиваются точкой с запятой, поэтому регулярное выражение не срезает горчицу.
Спецификация HTML5 теперь явно описывает, что браузеры использовали для исправления ошибок с середины 90-х: покажите вещь дословно, если она не соответствует известной символьной ссылке. Поэтому, если вы хотите, чтобы ваше регулярное выражение работало как браузер, вы должны скопировать поведение браузера.
Это означает, что вы должны проверить полный список известных ссылок, например, упомянутый Юккой. Вы можете сократить термин с умным использованием скобок,
[aeiou]uml
но вам нужно вставить те же знания в регулярные выражения, которые есть в браузере, чтобы получить тот же результат.
Изменить: Кстати, именованные объекты могут также иметь номера в них, например, &ensp13;
,
Имена сущностей имели от 2 до 7 букв, следуя традиции SGML, и это все еще имеет место в спецификации HTML 4.01 (и спецификациях XHTML). Но черновики HTML5 добавляют большое количество сущностей, называемых именованными ссылками на символы, и некоторые из них довольно длинные, например, EmptyVerySmallSquare
, Поэтому было бы лучше избегать любого фиксированного верхнего предела - или нижнего предела, превышающего 1.