一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

自動生成文章摘要的代碼[PHP 版本]

實現(xiàn)內(nèi)容:截斷一段含有HTML代碼的文本,但是不會出現(xiàn)圍堵標(biāo)記沒有封閉的問題。
說明:這是php版的,用于在服務(wù)器端使用,如果你需要一個客戶端版的,請閱讀下一篇 
我們在寫B(tài)LOG這樣的程序時經(jīng)常需要顯示文章前一部分的,但是又怕不恰當(dāng)?shù)慕財嗥茐姆忾]標(biāo)簽以造成整個文檔結(jié)構(gòu)破壞,使用我的函數(shù)可以在要求不高的情況下解決這個問題。
大家應(yīng)該考慮這個函數(shù)在服務(wù)端應(yīng)用還是在客戶端應(yīng)用。因為我考慮這個函數(shù)可能運行起來比較費機(jī)器,所以安全性要求不高的情況下可以放在客戶端上。
最好數(shù)據(jù)表中單獨一個字段放這個摘要,這樣相應(yīng)的數(shù)據(jù)庫查詢也優(yōu)化了。犧牲一點點空間換很多時間還是劃算的。
再聊一下安全性問題,主要是內(nèi)容安全性。如果客戶端意圖更改正常的摘要信息的話,一般都是BLOG的主人才有這個權(quán)力,那么他使得摘要和原文的一致性破壞就是他自己的事了。內(nèi)容以外的安全性都可以在服務(wù)端解決。所以還是推薦在客戶端使用本函數(shù)。
核心代碼

復(fù)制代碼 代碼如下:
// 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; 
}; 
若遇到問題(發(fā)現(xiàn)上面的函數(shù)對多字節(jié)字符集支持得不好) 不煩試試下面的這個!

復(fù)制代碼 代碼如下:
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技術(shù)自動生成文章摘要的代碼[PHP 版本],轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 在线观看免费国产视频 | 91丝袜美腿高跟国产极品老师 | 欧美另类人交videos新 | 成人影院vs一区二区 | 国产成人一区二区三区影院免费 | a中文字幕1区 | 久久两性视频 | 成年人三级网站 | 狠狠色丁香久久综合五月 | 国内精品免费视频 | 成年色黄大色黄大片 视频 成年视频xxxxxx在线 | 国产精品视频成人 | 无码精品一区二区三区免费视频 | 国产精品2020在线看亚瑟 | 成人在线91| 亚洲精品福利 | 中文字幕在线观看国产 | 色婷婷激婷婷深爱五月小说 | 中文字幕一区在线观看视频 | 激情网成人| 91精品国产91久久久久久青草 | 国内自拍一二三四2021 | 日韩精品中文字幕一区二区三区 | 2021天天躁夜夜躁西西 | 国产乱码精品一区二区三上 | 午夜精品一区二区三区在线观看 | 激情六月在线视频观看 | 国产一区二区视频在线播放 | 大陆5g天天看天天爽免费 | 免费看美女扒开腿让男人桶 | 黄视频大全 | 国产中文字幕乱人伦在线观看 | 日韩视频一区二区 | 一区二区成人国产精品 | 久久99精品久久久久久秒播 | 色网视频在线观看 | 美女网站视频色 | 七七国产福利在线二区 | 亚洲美女aⅴ久久久91 | 91国视频在线观看 | 国产精品久久久久影视不卡 |