浅析php插件 HTMLPurifier HTML解析器

本篇文章是对php插件 HTMLPurifier HTML解析器进行了详细的分析介绍,需要的朋友参考下
 

HTMLPurifier插件的使用
下载HTMLPurifier插件
HTMLPurifier插件有用的部分是 library


使用HTMLPurifier library类库
第一种方式

复制代码 代码如下:

<?php
require_once 'HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
?>

或者

复制代码 代码如下:

<?php
require_once 'HTMLPurifier.includes.php';
require_once 'HTMLPurifier.autoload.php';
$config = HTMLPurifier_Config::createDefault();
?>

官网给出的例子是

复制代码 代码如下:

require_once 'HTMLPurifier.auto.php';

我同事常用的是

复制代码 代码如下:

require_once 'HTMLPurifier.includes.php';
require_once 'HTMLPurifier.autoload.php';

设置$config
configdoc
http://htmlpurifier.org/live/configdoc/plain.html例子

复制代码 代码如下:

$config->set('HTML.AllowedElements', array('div'=>true, 'table'=>true, 'tr'=>true, 'td'=>true, 'br'=>true));
$config->set('HTML.Doctype', 'XHTML 1.0 Transitional') //html文档类型(常设)
$config->set('Core.Encoding', 'UTF-8') //字符编码(常设)

HTML允许的元素
div元素,table元素,tr元素,td元素,br元素
new HTMLPurifier对象

复制代码 代码如下:

$purifier = new HTMLPurifier($config);

调用HTMLPurifier对象的purify方法

复制代码 代码如下:

$puri_html = $purifier->purify($html);

第二种方式
自定义一个类 HtmlPurifier.php

复制代码 代码如下:

<?php
require_once 'HTMLPurifier.includes.php';
require_once 'HTMLPurifier.autoload.php';
class Resume_HtmlPurifier implements Zend_Filter_Interface{
protected $_htmlPurifier = null;
public function __construct($options = null)
{
$config = HTMLPurifier_Config::createDefault();
$config->set('Code.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'XHTML 1.0 Transitional')
if(!is_null($options)){
foreach($options as $option){
$config->set($option[0], $option[1], $option[2]);
}
}
$this->_htmlPurifier = new HTMLPurifier($config);
}
public function filter($value)
{
return $this->_htmlPurifier->purify($value);

}
}
?>

设置config信息
例如:

复制代码 代码如下:

$conf = array(
array('HTML.AllowedElements',
array(
'div' => true,
'table' => true,
'tr' => true,
'td' => true,
'br' => true,
),
false), //允许属性 div table tr td br元素
array('HTML.AllowedAttributes', array('class' => TRUE), false), //允许属性 class
array('Attr.ForbiddenClasses', array('resume_p' => TRUE), false), //禁止classes如
array('AutoFormat.RemoveEmpty', true, false), //去空格
array('AutoFormat.RemoveEmpty.RemoveNbsp', true, false), //去nbsp
array('URI.Disable', true, false),
);

调用

复制代码 代码如下:

$p = new Resume_HtmlPurifier($conf);
$puri_html = $p->filter($html);

时间: 2024-09-11 21:52:04

浅析php插件 HTMLPurifier HTML解析器的相关文章

浅析ASP.NET万能JSON解析器_实用技巧

概念介绍还是先简单说说Json的一些例子吧.注意,以下概念是我自己定义的,可以参考.net里面的TYPE的模型设计如果有争议,欢迎提出来探讨! 1.最简单:{"total":0} total就是值,值是数值,等于0 2. 复杂点{"total":0,"data":{"377149574" : 1}}total是值,data是对象,这个对象包含了"377149574"这个值,等于1 3. 最复杂{"

【SpringMVC框架】小结+视图解析器配置前缀和后缀

1.入门程序小结 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法. 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析   使用此种方式可以实现 RESTful风格的url 处理器映射器: 非注解处理器映射器(了解) 注解的处理器映射器(掌握)对

groovy/java自实现json解析器(3)JsonArray

底层数据结构实现 jsonArray的底层数据结构有列表(list)来维护.它的定义和构造函数初始化工作如下图所示.一般创建对象时默认不传参来构造一个空的列表. def jsonList //底层数据存储结构 /** * 构造函数,若不传参数,默认初始一个 */ def JsonArray( jsonList = null){ this.jsonList = jsonList == null ? [] :jsonList } 公共调用API 下面定义了一些对外提供的API接口工具函数: /**

XML入门教程:XML 解析器

xml|教程|入门教程 如需读取.更新.创建或者操作某个XML文档,则需要XML解析器. 实例 解析XML文件 - 跨浏览器的实例 本例是一个跨浏览器的实例,把某个XML文档("note.xml")载入XML解析器. <html><body><script type="text/vbscript">set xmlDoc=CreateObject("Microsoft.XMLDOM")xmlDoc.async=&

从任意数据结构生成XML解析器产生SAX事件

xml|生成xml|数据|数据结构  在j2ee1.4标准教材里看到一个很有趣的例子,从任意数据结构生成XML解析器产生SAX事件.数据结构可以是文本文件,PDF格式文档等.关键是自己解析这些数据源.另外一个有意思的地方是观察者模式的应用.所以就粗糙的改了一下并完整到可以测试运行.观察者模式简略UML图: 具体实现 被观察者对象ParseXMLSubject类:package test; import java.io.*;import org.xml.sax.helpers.Attributes

XML的四种解析器原理及性能比较

xml|比较|性能  1: DOM    DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准.DOM 是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的.DOM 以及广义的基于树的处理具有几个优点.     首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上

UglifyJS有个超赞的JavaScript解析器

我一直在为Jscex寻找好用的JavaScript解析器,之前我用的是Narcissus,也写过相关文章.不过可惜的是,Narcissus使用了SpiderMonkey的扩展,因此它并不是用ECMAScript 3实现的,无法在IE 8等浏览器中使用.目前Jscex使用的是NarrativeJS中旧版的Narcissus,但是我并不喜欢它输出的AST结构,使用中也发现高级功能里的一些bug,有些食之无味弃之可惜的感觉,而改写新版Narcissus又必须大动干戈.最近我接触到了UglifyJS,发

MagpieRSS:PHP的Rss解析器

rss MagpieRSS是一个很好的Rss解析类,它完全支持RSS 0.9 - 1.0, 部分支持 RSS 2.0. * supports RSS 0.9 - 1.0, with limited RSS 2.0 support* supports namespaces, and modules, including mod_content and mod_event* open minded [1]* simple, functional interface, to object orient

C语言实现的XML解析器

最近做嵌入式开发,板子上面需要有解析XML的功能,理所当然地我就去网上找开源的来用.结果找来的要不是C++的,要不就是超级复杂的.像libxml,我统计了下解析一个40几KB的XML文件,居然动态申请内存100多次,对于没有mmu功能的arm7,真是无福消受了. 所以,我只能自己写一个来用了. 我写的这个xml解析器,非常简单,核心代码只有600多行.当然,功能也相对弱些,只支持ansi编码的xml文件,只能解析,不能生成. 整个解析器只用到了 若干条 EBNF文法 和 一个DFA状态机 (用来