Smarty的输出过滤功能outputfilter_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > Smarty的输出过滤功能outputfilter

Smarty的输出过滤功能outputfilter

 2010/12/15 8:02:02  kisa77  http://kisa77.javaeye.com  我要评论(0)
  • 摘要:最近项目中遇到一个问题:页面显示前需要对可能出现的违禁词过滤,之前的做法是使用fetch函数得到编译后的html做正则替换,因为页面不同位置需要设置不同的缓存时间,共执行了三次,导致页面耗时多了0.2s.其实在第一次坐下过滤就足够了,之后访问的都是过滤后的安全内容.翻看smarty源码可知fetch函数执行是页面已经进行了缓存.所以必须在smarty编译前过滤.方法1:采用smarty插件的形式,在页面display或fetch之前使用load_filter函数。例:$smarty->
  • 标签:功能 输出

最近项目中遇到一个问题:
??? 页面显示前需要对可能出现的违禁词过滤,之前的做法是使用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一下,做积累

?

?

发表评论
用户名: 匿名