截断HTML代码中单词的函数:
//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com
function truncate($text,$length,$suffix = '…',$isHTML = true) {
$i = 0;
$simpleTags=array('br'=>true,'hr'=>true,'input'=>true,'image'=>true,'link'=>true,'Meta'=>true);
$tags = array();
if($isHTML){
preg_match_all('/]+>([^
foreach($m as $o){
if($o[0][1] - $i >= $length)
break;
$t = substr(strtok($o[0][0]," \t\n\r\0\x0B>"),1);
// test if the tag is unpaired,then we mustn't save them
if($t[0] != '/' && (!isset($simpleTags[$t])))
$tags[] = $t;
elseif(end($tags) == substr($t,1))
array_pop($tags);
$i += $o[1][1] - $o[0][1];
}
}
// output without closing tags
$output = substr($text,$length = min(strlen($text),$length + $i));
// closing tags
$output2 = (count($tags = array_reverse($tags)) ? '' . implode('>',$tags) . '>' : '');
// Find last space or HTML tag (solving problem with last space in HTML tag eg. )
$pos = (int)end(end(preg_split('/<.>| /',$output,-1,PREG_SPLIT_OFFSET_CAPTURE)));
// Append closing tags to output
$output.=$output2;
// Get everything until last space
$one = substr($output,$pos);
// Get the rest
$two = substr($output,$pos,(strlen($output) - $pos));
// Extract all tags from the last bit
preg_match_all('//s',$two,$tags);
// Add suffix if needed
if (strlen($text) > $length) { $one .= $suffix; }
// Re-attach tags
$output = $one . implode($tags[0]);
//added to remove unnecessary closure
$output = str_replace('!-->','',$output);
return $output;
}