PHP 剪切HTML字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 剪切HTML字符串相关的知识,希望对你有一定的参考价值。
<?php
/*
In PHP, it is easy to extract an excerpt of a text string with a given length limit. But if you want to extract an excerpt from HTML, the tags that may exist in the text string make it more complicated.
This class provides a solution to extract excerpts from HTML documents with a given text length limit without counting the length of any HTML tags.
*/
// Author prajwala
// email  m.prajwala@gmail.com
// Date   12/04/2009
// version 1.0
class HtmlCutString{
  function __construct($string, $limit){
    // create dom element using the html string
    $this->tempDiv = new DomDocument;
    $this->tempDiv->loadXML('<div>'.$string.'</div>');
    // 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;
  }
}
function cut_html_string($string, $limit){
  $output = new HtmlCutString($string, $limit);
  return $output->cut();
}
?>
以上是关于PHP 剪切HTML字符串的主要内容,如果未能解决你的问题,请参考以下文章