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数据流应用的一个简单实例
Sep 14 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
ThinkPHP实现简单登陆功能
Apr 28 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伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
python 提取文件的小程序
2009/07/29 Python
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
团员个人的自我评价
2013/12/02 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
倡议书范文
2014/04/16 职场文书
五一活动标语
2014/06/30 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python
vue实力踩坑之push当前页无效
2022/04/10 Vue.js