<?php
class Html{
protected
$reachedLimit = false,
$totalLen = 0,
$maxLen = 25,
$toRemove = array();
public static function trim($html, $maxLen = 25){
$dom = new DomDocument();
$dom->loadHTML($html);
$html = new static();
$toRemove = $html->walk($dom, $maxLen);
// remove any nodes that passed our limit
foreach($toRemove as $child)
$child->parentNode->removeChild($child);
// remove wrapper tags added by DD (doctype, html...)
if(version_compare(PHP_VERSION, '5.3.6') < 0){
// http://stackoverflow.com/a/6953808/1058140
$dom->removeChild($dom->firstChild);
$dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild);
return $dom->saveHTML();
}
return $dom->saveHTML($dom->getElementsByTagName('body')->item(0));
}
protected function walk(DomNode $node, $maxLen){
if($this->reachedLimit){
$this->toRemove[] = $node;
}else{
// only text nodes should have text,
// so do the splitting here
if($node instanceof DomText){
$this->totalLen += $nodeLen = strlen($node->nodeValue);
// use mb_strlen / mb_substr for UTF-8 support
if($this->totalLen > $maxLen){
$node->nodeValue = substr($node->nodeValue, 0, $nodeLen - ($this->totalLen - $maxLen)) . '...';
$this->reachedLimit = true;
}
}
// if node has children, walk its child elements
if(isset($node->childNodes))
foreach($node->childNodes as $child)
$this->walk($child, $maxLen);
}
return $this->toRemove;
}
}
$texto = '<p style="text-align: center">(Vecino de Eiras - Senra)</p>
<p style="text-align: center">Falleció el día 13 de Septiembre de 2013 a los 78 años de edad.</p>
<p style="text-align: center"><strong>D.E.P.</strong></p>
<p style="text-align: left">Su hermana, Consuelo Gómez Maroño; Sobrinos, Nieves, Pilar, Carmen, Fina y Gloria Viqueira Gómez, Tania Fernández Gómez, José, Encarnación, María y Manuel Suárez Gómez, Antonio Cao Gómez y José Gómez Pedreira; Sobrinos políticos, Bisobrinos, Primos y demás familia.</p>
<p style="text-align: left">Ruegan una oración por su alma y agradecen la asistencia al funeral de aniversario que por su eterno descanso se celebrará <strong>el Sábado día 13 de Septiembre a las CINCO Y MEDIA de la tarde, en la Iglesia parroquial de SANTA EULALIA DE SENRA.</strong></p>
<p style="text-align: left">Favores por los que anticipan las más expresivas gracias.</p>
<p style="text-align: left"> </p>
<p style="text-align: left"><strong>Senra - Oroso 13 de Septiembre de 2014.</strong></p>';
print html::trim(utf8_decode($texto), 200);