composer require machy8/xhtml-formatter
Compiles this 💩
<!DOCTYPE html>
<html lang="en">
    <head><meta charset="utf-8"><title>title</title>
    <link rel="stylesheet" href="style.css">
<script src="script.js"></script></head><body><!-- page content --></body></html>into this 😱😭
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>
			title
		</title>
		<link rel="stylesheet" href="style.css">
		<script src="script.js"></script>
	</head>
	<body>
		<!-- page content -->
	</body>
</html>and all you need is
use XhtmlFormatter\Formatter;
$formatter = new Formatter();
$output = $formatter->format($string);and if you want to disable formatting
<div>
	<formatter-off>
		<p>
			<b>Unformatted code goes <u>here</u></b>!
		</p>
	</formatter-off>
</div>$formatter
	// Change the content type from CONTENT_HTML (default) to CONTENT_XML or CONTENT_XHTML
	->setContentType(Formatter::CONTENT_XML)
	// Add new unpaired element
	->addUnpairedElement('element', Formatter::CONTENT_XML)
	// Add skipped elements
	->addSkippedElement('elementA elementB')
	// Indent file by 4 spaces instead of tabs
	->setSpacesIndentationMethod(4);