Filter style tags for email templates with XPath and Regex

With XPath you can fetch '<style>...</style>' and '<style type="text/css">...</style>':

$oDomInput = new DOMDocument();

$oDomInput->loadHTML($sHtml);

$oDOMXPath = new DOMXPath($oDomInput);

$oDOMNodeList = $oDOMXPath->evaluate('//style');

$oDomOutput = new DOMDocument();

if ($oDOMNodeList->length > 0) {
    for ($i = 0; $i < $oDOMNodeList->length; $i++) {
        $oDomOutput->appendChild($oDomOutput->importNode($oDOMNodeList->item($i), true));
    }
}

var_dump($oDomOutput->saveHTML());

However, this does not include style tags inside coditional comments '<!--[if gte IE 9]> ... <style> ... </style> <![endif]-->'.

With XPath you can fetch comments, conditional comments but also unwanted HTML comments:

$oDomInput = new DOMDocument();

$oDomInput->loadHTML($sHtml);

$oDOMXPath = new DOMXPath($oDomInput);

$oDOMNodeList = $oDOMXPath->evaluate('//comment()');

$oDomOutput = new DOMDocument();

if ($oDOMNodeList->length > 0) {
    for ($i = 0; $i < $oDOMNodeList->length; $i++) {
        $oDomOutput->appendChild($oDomOutput->importNode($oDOMNodeList->item($i), true));
    }
}

var_dump($oDomOutput->saveHTML());

In order to remove HTML comments from the HTML string use this Regex:

$sHtml = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/', '', $sHtml);
David van der Tuijn
"Mijn naam is David van der Tuijn, als senior php developer bij Floro Webdevelopment B.V. werk ik samen met een projectleider, back-end developers, front-end developers en designers, op basis van een functioneel- (FO) en technisch ontwerp (TO), bouw ik webapplicaties die voldoen aan de nieuwste ontwikkelingen op internet gebied. Ik werk zelfstandig, weet hoe een architectuur opgezet moet worden en kan deze uitdragen in een multidisciplinair team. binnen een project adviseer ik over de juiste methoden en technieken. Ik ontwikkel en bewaak de kwaliteit van de development werkzaamheden in projecten en kan projecten binnen een afgegeven planning afronden."