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实现批量查询清除一句话后门的代码
Jan 20 PHP
php一些公用函数的集合
Mar 27 PHP
php array_merge下进行数组合并的代码
Jul 22 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
CI框架常用函数封装实例
Nov 21 PHP
PHP与SQL语句常用大全
Dec 10 PHP
php写app接口并返回json数据的实例(分享)
May 20 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 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+Ajax实现表单验证的详解
2013/06/25 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
js类型检查实现代码
2010/10/29 Javascript
JS常用函数使用指南
2014/11/23 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
JS 通过系统时间限定动态添加 select option的实例代码
2016/06/09 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
node express使用HTML模板的方法示例
2019/08/22 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python图像处理入门(一)
2019/04/04 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
欠款纠纷起诉状
2015/05/19 职场文书
实习证明格式范文
2015/06/16 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python