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 4.2书写安全的脚本
Oct 09 PHP
如何过滤高亮显示非法字符
Oct 09 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
一个PHP并发访问实例代码
Sep 06 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
php preg_replace替换实例讲解
Nov 04 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
php绘制一条直线的方法
Jan 24 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
PHP底层运行机制与工作原理详解
Jul 31 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 smarty 二级分类代码和模版循环例子
2011/06/16 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
JavaScript对象学习经验整理
2013/10/12 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python学习小技巧总结
2018/06/10 Python
python实现感知器算法(批处理)
2019/01/18 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
python实现查找所有程序的安装信息
2020/02/18 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
会计毕业生自荐信
2013/11/21 职场文书
电子商务自荐书范文
2014/01/04 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
大学秋游活动方案
2014/02/11 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
APP界面设计技巧和注意事项
2022/04/29 杂记