tempDiv = new DomDocument; $this->tempDiv->loadXML('
'.$string.'
'); // keep the characters count till now $this->charCount = 0; $this->encoding = 'UTF-8'; // character limit need to check $this->limit = $limit; } function cut(){ // create empty document to store new html $this->newDiv = new DomDocument; // cut the string by parsing through each element $this->searchEnd($this->tempDiv->documentElement,$this->newDiv); $newhtml = $this->newDiv->saveHTML(); return $newhtml; } function deleteChildren($node) { while (isset($node->firstChild)) { $this->deleteChildren($node->firstChild); $node->removeChild($node->firstChild); } } function searchEnd($parseDiv, $newParent){ foreach($parseDiv->childNodes as $ele){ // not text node if($ele->nodeType != 3){ $newEle = $this->newDiv->importNode($ele,true); if(count($ele->childNodes) === 0){ $newParent->appendChild($newEle); continue; } $this->deleteChildren($newEle); $newParent->appendChild($newEle); $res = $this->searchEnd($ele,$newEle); if($res) return $res; else continue; } // the limit of the char count reached if(mb_strlen($ele->nodeValue,$this->encoding) + $this->charCount >= $this->limit){ $newEle = $this->newDiv->importNode($ele); $newEle->nodeValue = substr($newEle->nodeValue,0, $this->limit - $this->charCount); $newParent->appendChild($newEle); return true; } $newEle = $this->newDiv->importNode($ele); $newParent->appendChild($newEle); $this->charCount += mb_strlen($newEle->nodeValue,$this->encoding); } return false; } } ?>