最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP版自動生成文章摘要

 更新時間:2008年07月23日 09:17:00   作者:  
現(xiàn)內(nèi)容:截斷一段含有HTML代碼的文本,但是不會出現(xiàn)圍堵標記沒有封閉的問題。說明:這是PHP版的,用于在服務器端使用,如果你需要一個客戶端版的,請閱讀
自動生成文章摘要[JavaScript 版本]。
我們在寫B(tài)LOG這樣的程序時經(jīng)常需要顯示文章前一部分的,但是又怕不恰當?shù)慕財嗥茐姆忾]標簽以造成整
個文檔結構破壞,使用我的函數(shù)可以在要求不高的情況下解決這個問題。

大家應該考慮這個函數(shù)在服務端應用還是在客戶端應用。因為我考慮這個函數(shù)可能運行起來比較費機器,
所以安全性要求不高的情況下可以放在客戶端上。

最好數(shù)據(jù)表中單獨一個字段放這個摘要,這樣相應的數(shù)據(jù)庫查詢也優(yōu)化了。犧牲一點點空間換很多時間還
是劃算的。

再聊一下安全性問題,主要是內(nèi)容安全性。如果客戶端意圖更改正常的摘要信息的話,一般都是BLOG的主
人才有這個權力,那么他使得摘要和原文的一致性破壞就是他自己的事了。內(nèi)容以外的安全性都可以在服
務端解決。所以還是推薦在客戶端使用本函數(shù)。

核心代碼:
最近應用了一下,發(fā)現(xiàn)上面的函數(shù)對多字節(jié)字符集支持得不好,因此重寫了一下。

如果遇到問題,不妨試試下面的函數(shù)。

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;
};歡迎大家找錯誤。謝謝。

相關文章

最新評論

陆川县| 桂平市| 大悟县| 嘉义县| 建宁县| 呼玛县| 元氏县| 玛曲县| 新郑市| 英德市| 上饶市| 宁武县| 安康市| 东至县| 运城市| 武宣县| 白山市| 察隅县| 靖安县| 营口市| 云梦县| 韩城市| 永州市| 辉南县| 武冈市| 古交市| 汝城县| 滦南县| 鄢陵县| 苏尼特左旗| 华池县| 德格县| 沿河| 青海省| 永修县| 永善县| 双牌县| 岫岩| 保定市| 松滋市| 江门市|