Tidy. И не нужно искать альтернатив.
Вот, к примеру, один из моих вариантов использования.
$options = array("indent" => false,
"output-xml" => true,
"clean" => true,
"drop-proprietary-attributes" => true,
"drop-font-tags" => true,
"drop-empty-paras" => true,
"hide-comments" => true,
"join-classes" => true,
"join-styles" => true,
"show-body-only" => false);
$tidy = new tidy();
$str = $tidy->parseString($page, $options, 'utf8'); // $page содержит невалидный html
$tidy->cleanRepair();
echo $tidy; // валидный html
Со списком опцийсоветую поиграться самостоятельно.