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输出控制功能在简繁体转换中的应用
Oct 09 PHP
关于时间计算的结总
Dec 06 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
PHP获取文件后缀名的三个函数
Oct 15 PHP
基于Linux调试工具strace与gdb的常用命令总结
Jun 03 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
php使用cookie显示用户上次访问网站日期的方法
Jan 26 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 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之字符串变相相减的代码
2007/03/19 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python笔记:mysql、redis操作方法
2017/06/28 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python自定义函数def的应用详解
2020/06/03 Python
东方红海科技面试题软件测试方面
2012/02/08 面试题
Python如何定义一个函数
2015/09/01 面试题
生产厂长岗位职责
2014/02/21 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
个人投资合作协议书
2014/10/12 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
工作检讨书范文
2015/01/23 职场文书
创业计划书之家教中心
2019/09/25 职场文书