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安全配置方法
Jun 16 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
ThinkPHP中使用ajax接收json数据的方法
Dec 18 PHP
php数据访问之查询关键字
May 09 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
详解PHP 二维数组排序保持键名不变
Mar 06 PHP
laravel框架中间件简单使用方法示例
Jan 25 PHP
Laravel 5+ .env环境配置文件详解
Apr 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+mysql写的简单留言本实例代码
2008/07/25 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
accesskey 提交
2006/06/26 Javascript
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
python中map的基本用法示例
2018/09/10 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
tensorflow如何批量读取图片
2019/08/29 Python
python 下载文件的几种方法汇总
2021/01/06 Python
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
网络维护中文求职信
2014/01/03 职场文书
公司户外活动总结
2014/07/04 职场文书
担保书范本
2015/01/20 职场文书
2015年中个人总结范文
2015/03/10 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS