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 相关文章推荐
IIS6的PHP最佳配置方法
Mar 19 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
PHP htmlspecialchars_decode()函数用法讲解
Mar 01 PHP
Laravel 读取 config 下的数据方法
Oct 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删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
2015/12/20 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python操作SQLite数据库的方法详解
2017/06/16 Python
Python如何给你的程序做性能测试
2020/07/29 Python
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
30年同学聚会感言
2014/01/30 职场文书
教师个人剖析材料
2014/02/05 职场文书
战友聚会策划方案
2014/06/13 职场文书
教师个人教学总结
2015/02/11 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书