3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?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 substr($texto, 0, 200); print html::trim($texto, 14);
based on rvpMU
Output for 5.3.6 - 5.6.28, hhvm-3.12.0, 7.0.0 - 7.1.0
<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<body><p style="text-align: center">(Vecino de Eir...</p></body>
Output for hhvm-3.10.0

Process exited with code 153.
Output for 5.3.0 - 5.3.5
<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<p style="text-align: center">(Vecino de Eir...</p>
Output for 5.1.0 - 5.2.17
Parse error: syntax error, unexpected T_STATIC, expecting T_STRING or T_VARIABLE or '$' in /in/AF1b0 on line 18
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_STATIC, expecting T_STRING or T_VARIABLE or '$' in /in/AF1b0 on line 18
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/AF1b0 on line 7
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.4.1
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/AF1b0 on line 7
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/AF1b0 on line 7
Process exited with code 255.