PHP下最好用的富文本HTML过滤器:HTMLPurifier使用教程
HTMLPurifier是我目前用过最好的PHP富文本HTML过滤器了,采用了白名单机制,有效杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击!
HTMLPurifier项目地址:http://htmlpurifier.org
一、如何在程序中调用HTMLPurifier
1、一般性调用
根据官方的文档中,我们可以要在PHP程序中调用HTMLPurifier,需要先将HTMLPurifier.auto.php引入到程序文件中,具体方法如下:
require_once '/path/to/HTMLPurifier.auto.php' ; |
2、将HTMLPurifier整合到ThinkPHP中
根据ThinkPHP的规范,对于第三方扩展,不符合ThinkPHP开发规范的,需要将HTMLPurifier放入到Library/Vendor目录中。然后我们可以在方法中通过下面方法将HTMLPurifier.auto.php引入到框架程序中:
vendor( 'htmlpurifier.library.HTMLPurifier#auto' ); |
不过这里我使用的ThinkPHP 3.2.1,发现这种方法只能使用在函数中,对于控制器类中这样引入是无法正确识别的。也就是说,我们只能在common/function.php文件中引用。
二、创建HTMLPurifier对象并实现对富文本的过滤
官方文档已经给出了基本的创建方法,即使说先需要一个配置类Config,然后使用配置类对象来生成Purifier对象。然后调用purifier方法对需要过滤的文本进行过滤。代码如下:
$config = HTMLPurifier_Config::createDefault(); |
$purifier = new HTMLPurifier( $config ); |
$clean_html = $purifier ->purify( $dirty_html ); |
三、如何对HTMLPurifer的过滤器进行配置
要使用HTMLPurifier,重点还是在如何进行配置。对于上面的程序,我们通过createDefault()方法创建了一个默认的配置对象。我们如果要修改配置的话,可以通过set方法来进行配置设置,方法如下:
$config ->set( 'config_object' , value, a=null); |
第一个参数就是需要配置的属性,第二个参数就是属性的值,第三个参数具体是做什么用的我也还没有搞明白,不过一般都没有用过,等有时间了再慢慢儿来研究研究。
HTMLPurifier的配置属性可以通过其网站查询到:http://htmlpurifier.org/live/configdoc/plain.html
1、配置属性选择
HTMLPurifier的配置文档主要是两级分类,大类分Attr(属性)、HTML(html标签)、AutoFormat(自动格式)、CSS(css配置)、Output(输出配置)……小类选择通过大类名称加.加小类名称可以完成。
比如我要配置允许的html标签,比如说p标签和a标签,可以如下配置
$config ->set( 'HTML.Allowed' , 'p,a' ); |
2、属性值的选择
在官方文档中,点击一个属性后,可以看到对这个属性的解释,会告诉你这个属性的值的类型(Type)是String、Int、Array、Boolen……
接着还会告诉你这个属性的默认值,比如是NULL还是true还是false等。这个值的格式就跟PHP的格式一样的。
3、白名单过滤机制
HTMLPurifier使用了白名单过滤机制,只有被设置允许的才会通过检验。
4、基本过滤事例
a、过滤掉文本中的所有html标签
/** |
* 过滤掉所有html标签很简单,原因则在白名单机制完成 |
*/ |
$config ->set( 'HTML.Allowed' , '' ); |
b、保留超链接标签a及其href链接地址属性,并自动添加target属性值为’_blank’
$config ->set( 'HTML.Allowed' , 'a[href]' ); |
$config ->set( 'HTML.TargetBlank' , true); |
c、自动完成段落代码并清除掉无用的空标签
// 让文本自动添加段落标签,前提是必须允许P标签的使用 |
$config ->set( 'HTML.Allowed' , 'p' ); |
$config ->set( 'AutoFormat.AutoParagraph' , true); |
// 清除空标签 |
$config ->set( 'AutoFormat.RemoveEmpty' , true); |
……
当然了,HTMLPurifier的过滤功能非常强大的,每一个点都要写到那也不现实,这里主要还是要说明如何写配置,只有配置好了才知道如何去拓展!
原文地址:http://www.xcoder.cn/index.php/archives/971
最新文章
- IOC装配Bean(XML方式)
- Fragment的使用(一)
- Gson操作json
- 梳理源码中 View 的工作原理
- C/C++ 笔试、面试题目大汇总
- selenium+python自动化之元素定位
- 从网页监听Android设备的返回键
- 在linux系统下怎么安装两个nginx
- struts2 模型驱动的action赋值优先顺序
- SQL Server2012新特性概述
- NET开发者部署React-Native
- 安装WindowsXP操作系统(安装版) - 初学者系列 - 学习者系列文章
- unity3d打开对话框
- 【一天一道LeetCode】#350. Intersection of Two Arrays II
- PHP下CodeIgniter框架连接读取MS Access数据库文件
- RSA加密传输代码示例
- Java面试2018常考题目汇总
- mysql-linux定时备份mysql数据库
- golang 写日志到syslog
- 七、XHTML介绍
热门文章
- http://store.microsoft.com/home.aspx
- [LeetCode] String to Integer (atoi) 字符串
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---11
- Linux下的软连接和硬链接
- [原创] 树莓派个人实测 Q&;A(最新修改使用windows连接远程桌面)
- Spring Boot学习——统一异常处理
- 使用p6spy格式化日志输出
- Nginx修改版本信息或隐藏版本号
- mysql共享锁与排它锁
- [置顶]
 个人微信号发送zabbix告警信息