最近项目中遇到一个问题:
页面显示前需要对可能出现的违禁词过滤,之前的做法是使用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一下,做积累
分享到:
相关推荐
在实际项目中,还可以加入分页功能、搜索功能、排序选项等,以提供更丰富的用户体验。同时,确保对用户输入进行验证和过滤,以防止SQL注入等安全问题。在开发过程中,良好的代码组织和文档记录也是必要的,有助于...
6. **过滤器**:Smarty提供了丰富的过滤器,可以在变量被输出前进行处理,比如HTML转义、字符串截取、日期格式化等。 7. **配置选项**:Smarty允许开发者自定义配置,例如设置默认的模板目录、缓存目录、错误处理...
通过`$smarty->register_outputfilter`方法注册这个输出滤镜,模板输出的任何内容在发送到浏览器之前都会经过这个滤镜函数的处理。 通过以上三种过滤器,Smarty的用户可以灵活地对模板处理过程中的不同阶段进行控制...
Smarty以其强大的模板功能,如变量赋值、条件判断、循环控制、函数调用等,使得开发者可以在模板中进行复杂的逻辑处理,而不必将这些逻辑混入PHP代码中。 在使用Yaf扩展Smarty时,我们可能需要做以下步骤: 1. 安装...
8. **缓存**:Smarty支持缓存功能,能提高页面加载速度。可以设定模板是否缓存,以及缓存的生命周期。 9. **插件扩展**:Smarty的插件系统允许开发自定义的模板标签,增强其功能。包括插件函数、块插件、修饰符插件...
3. **安全性**: Smarty通过预定义的安全策略和过滤器,确保模板中的数据在输出时不会带来安全风险,如XSS攻击。 4. **模板继承和部分模板**: Smarty的模板继承机制允许创建一个基础模板,子模板可以通过覆盖或扩展...
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 [建立缓存]...
7. **变量过滤**:Smarty允许为变量设置预处理和后处理函数,确保数据在渲染前后的安全性。 8. **多区域布局**:通过使用sections和assign,Smarty可以方便地处理复杂布局,如页头、页脚、侧边栏等不同区域的管理。...
- **安全与过滤**:学习如何使用 Smarty 的安全功能,如变量过滤,防止XSS攻击。 - **缓存管理**:理解Smarty的缓存机制,包括何时启用缓存,如何清除缓存,以及自定义缓存策略。 - **实际项目应用**:通过实践...
Smarty 3.1.7在功能上提供了许多优势。首先,它支持模板继承,允许开发者定义一个基础模板,其他模板可以基于这个基础模板进行扩展和定制,减少了代码重复。其次,它引入了插件系统,这使得添加自定义函数和过滤器变...
在本项目“用smarty做的留言板功能”中,我们可以了解到如何利用Smarty框架来实现一个简单的用户交互系统。下面将详细探讨相关知识点。 1. **Smarty模板引擎**:Smarty是PHP的一个开源模板引擎,它提供了一种方式让...
Smarty提供了多种安全功能,如自动转义输出以防止XSS攻击,以及对模板变量的过滤和限制。`$smarty->security`选项可以开启安全模式,限制模板中能使用的PHP函数。 9. **模板调试** 在开发过程中,Smarty3.0的调试...
5. **插件系统**:Smarty 允许用户自定义函数、过滤器、修饰符等,扩展其功能,满足各种复杂需求。 6. **配置选项**:Smarty 提供了大量的配置选项,可以调整模板编译方式、安全设置、资源管理等,以适应不同的项目...
- **模板过滤**:Smarty提供了多种预定义的模板变量过滤器,用于确保输出的数据安全,例如防止XSS攻击。 - **防止SQL注入**:虽然主要由PHP代码负责,但Smarty也可以通过适当的变量处理避免SQL注入问题。 7. **...
- `{$smarty.now}`返回当前时间戳,配合`|date_format`过滤器可以格式化输出日期时间,如`{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}`。 ### 其他高级功能 - **{$smarty.capture}**:允许在模板中捕获和重用...
6. **缓存机制**:Smarty提供了缓存功能,可以将渲染后的模板结果存储起来,避免每次请求都重新计算。这对于提升网站性能非常关键,特别是在数据不变但渲染过程较慢的情况下。 7. **预编译**:Smarty 3.0支持模板预...
6. **安全性**:Smarty对用户输入进行了安全过滤,防止XSS攻击,如自动转义变量输出,以及提供`{strip}`、`{escape}`等指令增强安全性。 7. **预编译**:Smarty会将模板编译成PHP代码,然后执行编译后的代码,提高...
Smarty对用户输入的数据进行安全过滤,避免了XSS攻击。例如,它默认对所有变量进行HTML转义,确保输出内容的安全。 10. 国际化支持 Smarty内置了对多语言的支持,可以轻松地在模板中切换语言环境,实现国际化。 总...
4. **安全过滤**:Smarty提供了多种安全过滤器,可以对输出的内容进行处理,如HTML编码、URL编码、去除脚本等,以防止XSS攻击。 5. **缓存机制**: Smarty可以缓存整个页面或者页面的一部分,只有在模板或数据发生...