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 session 预定义数组
Mar 16 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
深入php内核之php in array
Nov 10 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 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
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
php中cookie的使用方法
2014/03/29 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
ES6入门教程之let和const命令详解
2017/05/17 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python多线程下载文件的方法
2015/07/10 Python
Python实现多线程抓取妹子图
2015/08/08 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
Python中的元组介绍
2019/01/28 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
电气专业应届生求职信
2013/11/01 职场文书
班组长的岗位职责
2013/12/09 职场文书
法律顾问服务方案
2014/05/15 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
《黄山奇石》教学反思
2016/02/18 职场文书