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输出Excel文件类
Feb 08 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
php技巧小结【推荐】
Jan 19 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
详解php协程知识点
2018/09/21 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
Python 代码性能优化技巧分享
2012/08/07 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
pandas计数 value_counts()的使用
2019/06/24 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
医药代表个人的求职信分享
2013/12/08 职场文书
法律专业实习鉴定
2013/12/22 职场文书
五一促销活动总结
2014/07/01 职场文书
2014年督导工作总结
2014/11/19 职场文书
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS