PHP版自动生成文章摘要


Posted in PHP onJuly 23, 2008

自动生成文章摘要[JavaScript 版本]。
我们在写BLOG这样的程序时经常需要显示文章前一部分的,但是又怕不恰当的截断破坏封闭标签以造成整
个文档结构破坏,使用我的函数可以在要求不高的情况下解决这个问题。

大家应该考虑这个函数在服务端应用还是在客户端应用。因为我考虑这个函数可能运行起来比较费机器,
所以安全性要求不高的情况下可以放在客户端上。

最好数据表中单独一个字段放这个摘要,这样相应的数据库查询也优化了。牺牲一点点空间换很多时间还
是划算的。

再聊一下安全性问题,主要是内容安全性。如果客户端意图更改正常的摘要信息的话,一般都是BLOG的主
人才有这个权力,那么他使得摘要和原文的一致性破坏就是他自己的事了。内容以外的安全性都可以在服
务端解决。所以还是推荐在客户端使用本函数。

核心代码:
最近应用了一下,发现上面的函数对多字节字符集支持得不好,因此重写了一下。

如果遇到问题,不妨试试下面的函数。

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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
php使用curl打开https网站的方法
Jun 17 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
php的socket编程详解
Nov 20 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
php array_merge下进行数组合并的代码
Jul 22 #PHP
用php过滤危险html代码的函数
Jul 22 #PHP
php socket方式提交的post详解
Jul 19 #PHP
php minixml详解
Jul 19 #PHP
php正则校验用户名介绍
Jul 19 #PHP
PHP批量生成缩略图的代码
Jul 19 #PHP
Discuz 模板引擎的封装类代码
Jul 18 #PHP
You might like
优化使用mysql存储session的php代码
2008/01/10 PHP
php获取图片信息的方法详解
2015/12/10 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
vue-router传参用法详解
2019/01/19 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
毕业生求职简历的自我评价
2013/10/23 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
会计系毕业求职信
2014/08/07 职场文书
认错检讨书
2014/10/02 职场文书
2014年收银工作总结
2014/11/13 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
学校通报表扬范文
2015/05/04 职场文书
家长会主持词开场白
2015/05/29 职场文书
清明节主题班会
2015/08/14 职场文书