自动生成文章摘要的php代码,多适用于文章或博客系统,自动生成一段摘要,将最精彩的内容突出呈现。
     以下代码,可能会有性能上的不足,建议大家在客户端使用。
编辑推荐:自动生成文章摘要的js代码。
核心代码:
 
<?php
// PHP 4.3 or above needed 
define("BRIEF_LENGTH", 800); //Word alinuxjishu/9952.html target=_blank class=infotextkey>mount of the Briefing of an Article 
function Generate_Brief($text){ 
global $Briefing_Length; 
if(strlen($text) <= BRIEF_LENGTH ) return $text; 
$Foremost = substr($text, 0, BRIEF_LENGTH); 
$re = "/<(/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)/i"; 
$Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT/i"; 
$Stack = array(); $posStack = array(); 
preg_match_all($re,$Foremost,$matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE); 
/* [Child-matching Specification]: 
$matches[$i][1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part 
$matches[$i][2] : Element Name. 
$matches[$i][3] : Right > of a "<...>" Friction */ 
for($i = 0 ; $i < count($matches); $i++){ 
if($matches[$i][1][0] == ""){ 
$Elem = $matches[$i][2][0]; 
if(preg_match($Single,$Elem) && $matches[$i][3][0] !=""){ 
continue; 
} 
array_push($Stack, strtoupper($matches[$i][2][0])); 
array_push($posStack, $matches[$i][2][1]); 
if($matches[$i][3][0] =="") break; 
}else{ 
$StackTop = $Stack[count($Stack)-1]; 
$End = strtoupper($matches[$i][2][0]); 
if(strcasecmp($StackTop,$End)==0){ 
array_pop($Stack); 
array_pop($posStack); 
if($matches[$i][3][0] ==""){ 
$Foremost = $Foremost.">"; 
} 
} 
} 
} 
$cutpos = array_shift($posStack) - 1; 
$Foremost = substr($Foremost,0,$cutpos); 
return $Foremost; 
}; 
若遇到函数对多字节字符集支持得不好的情况,大家可以参考下下面这个代码。
代码2:
<?php
function Generate_Brief($text){ 
global $Briefing_Length; 
mb_regex_encoding("UTF-8"); 
if(mb_strlen($text) <= BRIEF_LENGTH ) return $text; 
$Foremost = mb_substr($text, 0, BRIEF_LENGTH); 
$re = "<(/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)"; 
$Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i"; 
$Stack = array(); $posStack = array(); 
mb_ereg_search_init($Foremost, $re, 'i'); 
while($pos = mb_ereg_search_pos()){ 
$match = mb_ereg_search_getregs(); 
/* [Child-matching Formulation]: 
$matche[1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part 
$matche[2] : Element Name. 
$matche[3] : Right > of a "<...>" Friction 
*/ 
if($match[1]==""){ 
$Elem = $match[2]; 
if(mb_eregi($Single, $Elem) && $match[3] !=""){ 
continue; 
} 
array_push($Stack, mb_strtoupper($Elem)); 
array_push($posStack, $pos[0]); 
}else{ 
$StackTop = $Stack[count($Stack)-1]; 
$End = mb_strtoupper($match[2]); 
if(strcasecmp($StackTop,$End)==0){ 
array_pop($Stack); 
array_pop($posStack); 
if($match[3] ==""){ 
$Foremost = $Foremost.">"; 
} 
} 
} 
} 
$cutpos = array_shift($posStack) - 1; 
$Foremost = mb_substr($Foremost,0,$cutpos,"UTF-8"); 
return $Foremost; 
}; 
?>
至此,自动生成文章摘要的php代码的两种方法都介绍完了,希望对您有所帮助。
编辑推荐:
php 摘要生成函数(自定义,无乱码)