Не знаете, как отметить этот вопрос. У меня есть база данных документов XHTML, которые преобразуются LaTeXMLpost; однако, заявив, что они имеют вопросы валидации, является преуменьшением. Мне нужно показать их в браузере. Однако автозаполнение тегов из-за недействительной разметки помешает моей структуре.Отображение недопустимого HTML в макете
Минимальный пример:
<!doctype html>
<html>
<head>
<title>test</title>
</head>
<body>
<div id="content" style="background-color:pink">
<!-- yield -->
<section >
<ul>
<li>
<div>
<p>
First
<li>
<div>
<p>
Second
</p>
</div>
</li>
</p>
</div>
</li>
</ul>
</section>
<section>
Next
</section>
<!-- end yield -->
</div><!-- end content -->
</body>
</html>
Все внешние комментарии является раскладка; внутри него находится загруженный документ. Если все было принято по номинальной стоимости, все должно быть розовым, верно?
Проблема в том, что «Следующий» загружается за пределами #content
. Несмотря на то, что он действительный XML, он не соответствует DTD HTML/XHTML (или что-либо, передаваемое для DTD в HTML5), поэтому он становится искалеченным.
Вопрос: Как защитить свой макет от недействительной разметки внутри него? Могу ли я что-то сделать для контента, чтобы нормализовать его? Я загружаю его в Nokogiri перед отображением, но я все равно оказываюсь в этом беспорядке (поскольку XML не искажен, я полагаю, Nokogiri ничего не делает).
Мне все равно, отображается ли оно красиво или нет, теперь мне все равно, что он остается в безопасности (в противном случае у меня возникли проблемы с его манипулированием, добавлением событий, стилей и почти всего остального).
I * я * с помощью Nokogiri. Однако, как я уже сказал выше, XML хорошо сформирован, нет никаких неизвестных или скрещенных тегов ... но он искажен предположениями HTML браузера о том, где следует поместить закрытый тег. К сожалению, в связанном вопросе нет ничего отдаленного, поскольку это касается недействительных тегов. :( – Amadan
Как насчет использования чего-то вроде https://github.com/rgrove/sanitize, все еще основанного на nokogiri, но трансформаторы выглядят полезными. Один из способов - написать такую логику, которая проверяет, действителен ли текущий родитель узла из валидатора pov если не удалите его. Худшее решение для корпуса: просто сгладьте все, что-то вроде document.text или document.clean – dakull