最近项目中遇到一个问题:
页面显示前需要对可能出现的违禁词过滤,之前的做法是使用fetch函数得到编译后的html做正则替换,因为页面不同位置需要设置不同的缓存时间,共执行了三次,导致页面耗时多了0.2s.其实在第一次坐下过滤就足够了,之后访问的都是过滤后的安全内容.
翻看smarty源码可知fetch函数执行是页面已经进行了缓存.所以必须在smarty编译前过滤.
方法1:采用smarty插件的形式,在页面display或fetch之前使用load_filter函数。
例:
$smarty->load_filter('output','censor'); //censor为插件名字
插件代码:
function smarty_outputfilter_censor($source, &$smarty)
{
include(ROOT .'/config/Censor.php');
$source = empty($sysCensor['filter']) ? $string : preg_replace($sysCensor['filter']['find'], $sysCensor['filter']['replace'], $source);
return $source;
}
这种方法不好的地方就是一旦使用该函数,之后执行的代码都会受影响。如果只想对部分页面进行过滤操作,可以使用下面这种
方法2:
使用smarty的register_outputfilter函数来调用自定义的过滤函数
$smarty->register_outputfilter(array($this->sysFun,'replaceCensor'));
register_outputfilter的参数为array($object,$method),可以任意调用A类下面的B方法进行过滤。再使用unregister_outputfilter函数即可对范围内的页面进行过滤
$smarty->unregister_outputfilter(array($this->sysFun,'replaceCensor'));
mark一下,做积累
分享到:
相关推荐
php+smarty输出资讯列表,生成html静态
unregister_outputfilter [注销输出过滤器] unregister_postfilter [注销提交过滤器] unregister_prefilter [注销预过滤器] unregister_resource [注销资源] 14. Caching [缓存] Setting Up Caching [建立缓存]...
unregister_outputfilter [注销输出过滤器] unregister_postfilter [注销提交过滤器] unregister_prefilter [注销预过滤器] unregister_resource [注销资源] 14. Caching [缓存] Setting Up Caching [建立缓存]...
Smarty Smarty Smarty
在PHP的世界里已经出现了各式各样的模板类,但就功能和速度来说Smarty还是一直处于领先地位,因为Smarty的功能相对强大,所以使用起来比其他一些模板类稍显复杂了一点。现在就用30分钟让您快速入门。 一. 安装 ...
主要介绍了smarty高级特性之过滤器的使用方法,结合实例形式分析了smarty过滤器的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
用smarty做的留言板功能,使用的是PHP语言,简单的小功能。
自己摸索的扩展方法,之前在官网看到的方法有一点问题,可能是没更新吧,大家共同学习~
smarty3.0,smarty最新版本
Smarty 模板引擎教程,内容主要有基本语法、变量、组合修改器、内建函数、自定义函数、配置文件、控制台调试、缓存、插件扩展、使用技巧和经验等,比较详细的一个中文手册
Smarty最新版官网,Smarty最新版下载自Smarty官网
$smarty= Smarty::instance(); 模板 之前的smarty模板,相当于重新定义了一套标签语言,那么smarty3提供了一种新的模板形式,直接支持php语法的模板。 但是问题就出来了,我们还有必要用模板吗? 引用php类型模板...
在Smarty的程序里,这些被忽略了。模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表格,背景色,字体大小,样式表,等等)。有一天程序员想要改变文章检索的方式(也就是程序逻辑的改变)。这...
php模版 (smarty)php模版 (smarty)php模版 (smarty)php模版 (smarty)php模版 (smarty)php模版 (smarty)php模版 (smarty)
php5会使用的smarty运算符,smarty是在php前期使用中常见的模版分离,同时国内鼎鼎大名的ecshop也是采用这样方式开发系统
smarty开发的实例,以smarty实现留言本的功能,
这是我开发过的用smarty模板模仿ecshop功能开发的程序,使用时只需要导入数据库,修改配置文件即可,附带开发手册(详细),有什么不明白的直接加本人QQ:1094230936
smarty 迷你
smarty中section的使用 smarty section php
1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。 2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的...