Я ищу хорошие методы управления HTML в PHP. Например, проблема, с которой я сейчас сталкиваюсь, связана с искаженным HTML.
Я получаю данные, которые выглядят примерно так:
<div>This is some <b>text
Как вы заметили, в HTML отсутствуют закрывающие теги. Я мог бы использовать регулярное выражение или XML-парсер для решения этой проблемы. Однако вполне вероятно, что в будущем мне придется проделать другие манипуляции с DOM. Интересно, есть ли какие-нибудь хорошие библиотеки PHP, которые обрабатывают манипуляции с DOM, аналогично тому, как Javascript обрабатывает манипуляции с DOM.






В PHP есть расширение PECL, которое дает вам доступ к функциям HTML Tidy. Tidy - довольно мощная библиотека, которая должна уметь разумно брать подобный код и закрывать теги.
Я использую его для очистки искаженных XML и HTML, отправленных мне системой классифицированных объявлений перед импортом.
Я думаю, что для управления DOM вы ищете это. Я использовал для синтаксического анализа HTML-документов из Интернета, и у меня это сработало.
Я считаю PHP Simple HTML DOM самой полезной и простой библиотекой. Лучше, чем PECL, я бы сказал.
Я написал статью о как использовать его, чтобы очистить даты турне артиста myspace (просто пример.) Вот ссылка на php простой парсер html dom.
Встроенная библиотека DOM может легко решить эту проблему. Метод loadHTML принимает искаженный XML, а метод load - нет.
$d = new DOMDocument;
$d->loadHTML('<div>This is some <b>text');
$d->saveHTML();
Результат будет:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<div>This is some <b>text</b></div>
</body>
</html>
Я ввел аналогичный ответ, но немного подробнее о кодировке строк и о том, как извлечь фрагмент документа здесь
Я бы запустил искаженный HTML-код через HTML Purifier, прежде чем делать с ним что-нибудь еще.