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字符串的主要内容,如果未能解决你的问题,请参考以下文章

pythonpython操作剪切板-pyperclip模块

PHP 很短的片段:PHP单词剪切

Delphi的windows剪切板操作函数

vim选中字符复制/剪切/粘贴

php 剪切文字

PHP 将文本剪切为特定长度。