- preg_replace_callback: documentation ( source)
- strtolower: documentation ( source)
- libxml_use_internal_errors: documentation ( source)
- ucfirst: documentation ( source)
<?php
$html = <<<HTML
<p>Lorem IPSUM is simply dummy text.<br>Here is dummy text. LOREM ipsum is simply dummy text! wHAt is LOREM IPSUM? Hello lorem ipSUM!</p>
HTML;
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach($xpath->query('//text()') as $textNode) {
$textNode->nodeValue = preg_replace_callback(
'/(?:^|[.!?]) *\K[a-z]+/',
function($m) {
return ucfirst($m[0]);
},
strtolower($textNode->nodeValue)
);
}
echo $dom->saveHTML();