1. /** 
  2.  * 获取HTML字符串的子串,返回的子串仍然是一个标准的HTML字符串。 
  3.  * 
  4.  * @param string $str 需要被截断的字符串 
  5.  * @param int $length 子串长度,只能是一个近似值,而不是100%等于此长度。 
  6.  * @param int start 从哪个位置开始截断 
  7.  * @return string 
  8.  * @link http://blog.830725.com/post/8.html 
  9.  */ 
  10. function subHtml($str$length = 300, $start = 0) 
  11.   /* 截取指定的长度 */ 
  12.   $summary = mb_substr($str$start$length'utf-8'); 
  13.   $tidy = new \Tidy(); 
  14.   /* 修复截取的HTML内容,使其仍是一个标准的XHTML文档。 */ 
  15.   $str = $tidy->repairString($summaryarray('output-xhtml'=>true), 'utf8'); 
  16.   /* 重新解析前面修复的XHTML内容,获取body标签内的内容。 */ 
  17.   $tidy->parseString($strarray('output-xhtml'=>true), 'utf8'); 
  18.   $children = $tidy->body()->child; 
  19.   $ret = ''
  20.   foreach($children as $child
  21.   { $ret .= $child->value; } 
  22.   unset($tidy); 
  23.   return $ret

 原文地址:http://blog.830725.com/post/html-string-truncate-and-repair.html