Подтвердить что ты не робот

Почему имена объектов HTML с dec <255 не требуют точки с запятой?

В простом HTML-документе &pound (dec 163) отображается как £ без необходимости ;, тогда как &oelig (dec 339) будет отображать только œ с точкой с запятой. Кажется, что каждый html-объект с десятичным значением под 255 будет отображаться без необходимости точки с запятой, как в FireFox, так и в Chrome.

Что дает?

4b9b3361

Ответ 1

Причина в том, что исторически точка с запятой была необязательной, когда ссылка на объект (или ссылка на символ) не сразу сопровождается символом имени. Итак, &pound? ОК, так как ? не является символом имени (т.е. Символом, разрешенным в именах), но &pound4 не является, поскольку 4 является символом имени, делая pound4 имя объекта (которое undefined в HTML, но может однажды определиться). Это правило является частью наследия SGML в HTML, что является одной из немногих вещей, где браузеры действительно применяли специальность SGML.

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

Вот почему текущая практика браузера позволяет пропускать точки с запятой, как в "классическом" HTML, но только для ограниченного набора ссылок на символы, обозначающих символы ISO Latin 1, то есть символы с номером Unicode менее 256 в десятичном формате (FF в шестнадцатеричном формате), Это был исходный набор ссылок на сущности, и поэтому такие ссылки широко использовались без точки с запятой. Таким образом, практика представляет собой компромисс: они хотят поощрять использование рекомендуемой нотации, но не лишают законной силы большинства старых страниц, тем более, что браузеры не могут их правильно отобразить.

В проектах HTML5 были разные позиции по этому вопросу, но, например, HTML5 CR с 6 августа 2013 года требует точки с запятой во всех случаях даже в синтаксисе HTML. Отсутствие точки с запятой определяется как ошибка синтаксического анализа, что означает, что обработка ошибок хорошо определена (объект должен быть распознан), но браузеры все еще могут прекратите синтаксический анализ при первой ошибке синтаксического анализа!

Ответ 2

Во-первых, это полностью зависит от того, как хочет простить браузер/механизм рендеринга, и не является свойством HTML: сущности all должны заканчиваться в виде двоеточия, или у вас есть недопустимые синтаксис. (WHATWG "HTML Living Standard" смущает, что эта полуколока является частью имени, что делает его необязательным в Devloper Edition, но полный стандартный текст/проект W3C HTML5 более ясен: "имя должно быть таким, которое заканчивается символом S + + 003B U + 003B (;)." )

Во-вторых, обращение к символу с "десятичным значением" в лучшем случае является двусмысленным. 163 и 339 являются "кодовыми точками" этих символов в Юникоде, которые обычно выражаются в шестнадцатеричном формате. Другие кодировки будут иметь разные позиции для этих символов, которые также могут быть выражены как "десятичное значение", если вы хотите.

В-третьих, я предполагаю, что это не так много общего с тем, где они входят в определенную последовательность кодирования, но насколько они распространены - полный список чрезвычайно длинный (→ WHATWG/→ W3C). В интерпретации таких недействительных последовательностей необходимо провести компромисс, поскольку URL-адрес может содержать неэкранированные амперсанды, которые, в свою очередь, выглядят как незавершенные объекты (например, http://example.com/foo?bar=rab&oelig=gileo). Таким образом, браузеры пытаются проделать эту тонкую линию и предположить, какая ошибка, вероятно, была сделана в конкретном случае.