- libxml_use_internal_errors: documentation ( source)
<?php
$html = <<<HTML
<body>
<div>foo</div>
<shortcode type="content" />
<div>bar</div>
</body>
HTML;
$replace = <<<HTML
<div>content</div>
HTML;
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
echo $dom->saveHTML($dom->documentElement);
echo PHP_EOL, '---------------------------', PHP_EOL;
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//shortcode');
foreach($nodes as $node) {
$newHTML = $dom->createDocumentFragment();
$newHTML->appendXML($replace);
$node->parentNode->insertBefore($newHTML, $node);
$node->parentNode->removeChild($node);
}
echo $dom->saveHTML($dom->documentElement);