Есть ли список всех HTML-тегов, которые не нуждаются в солидусе или закрывающем теге? - PullRequest
0 голосов
/ 06 июля 2019

Я создал парсер для html, но я работал в предположении, что он будет следовать правилу, что существует только две формы:

<foo> </foo>
<foo/>

Очевидно, что это неправильно.Тэги типа base, meta и link не нуждаются в этом.Я бы хотел, чтобы это было не так, потому что я нашел такие вещи в сценарии:

for(var d=b.length,e=b[a];a<d>>1;)

О, смотри, мифический тег <d>.

Так что мне нужносделать себе белый список тегов, чтобы игнорировать.Есть ли полный список для тегов, которые не требуют солидус или закрывающий тег?Если нет, мне придется переписать мой парсер.

Спасибо

1 Ответ

1 голос
/ 06 июля 2019

Вы можете извлечь список из WHATWG HTML Living Standard .Или, если хотите, спецификацию W3C HTML 5 или последующий черновик .Согласно Википедии , конфликт в последнее время разрешен в пользу WHATWG, поэтому вы, вероятно, захотите перейти к первому.

В любом случае, обратите особое внимание на подзаголовок "Пропустить тег в text / html "в описании каждого элемента.Но вам нужно внимательно прочитать документ, чтобы понять все тонкости синтаксического анализа HTML.

Примечание. Конечные теги могут быть не только опущены.Есть также элементы, чей тег open можно опустить.(Классическим примером является <tbody>, который вряд ли когда-либо физически присутствует в документе HTML, но есть множество других. Например, <head>.) Тот факт, что открытый тег элемента был опущен, не вызываетпропуск закрывающего тега элемента, хотя обычно это так.Таким образом, вы не можете сделать это просто списком пропущенных тегов;вам также необходимо принять во внимание правила содержания элементов.

Кроме того, хотя алгоритм полного разбора удивительно сложен даже для действительных документов, стандартный алгоритм и реальные парсеры HTML еще сложнее, потому что онистарайтесь изящно работать с веб-страницами, которые не соответствуют стандарту.

...