Я использую PHP DOMDocument для анализа и нормализации представленного пользователем HTML с помощью метода loadHTML для синтаксического анализа содержимого, а затем получения корректного результата с помощью saveHTML:
$dom= new DOMDocument();
$dom->loadHTML('<div><p>Hello World');
$well_formed= $dom->saveHTML();
echo($well_formed);
Это делает красивую работу по разбору фрагмента и добавлению соответствующих закрывающих тегов. Проблема в том, что я также получаю кучу тегов, которые я не хочу, таких как <!DOCTYPE>, <html>, <head> и <body>. Я понимаю, что каждый хорошо сформированный HTML-документ нуждается в этих тегах, но фрагмент HTML, который я нормализую, будет вставлен в существующий действительный документ.