-
-
// PHP 4.3 or above needed - define("BRIEF_LENGTH", 800); //Word amount 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:
- 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 摘要生成函数(自定义,无乱码)
|