在使用yii2框架的时候会用到htmlpurifier,htmlpurifier本身对语法的检验比较严格,个人觉得是目前最好用的富文本过滤器。
htmlpurifier采用的是白名单机制,非常有效的杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击。
项目地址: http://htmlpurifier.org
非yii2框架的可以使用Composer安装
$ composer require "ezyang/htmlpurifier": "dev-master"
yii2框架已经内置了,所以可以直接使用
先上使用代码:
<?= \yii\helpers\HtmlPurifier::process($model->data->processedContent,function ($config) { $dom = $config->getHTMLDefinition(true); $config->set('Attr.EnableID', true); $dom->addAttribute("li", 'role', 'Text'); $dom->addAttribute("ul", 'role', 'Text'); $dom->addAttribute("a", 'data-toggle', 'Text'); $dom->addAttribute("a", 'role', 'Text'); $dom->addAttribute('a','aria-controls','Text'); }) ?>
使用过程中碰到了一些问题记录一下
我需要在内容里面加锚点,就是a标签用于边栏文章导航可以快速定位,但HtmlPurifier默认是屏蔽了name属性,文档也不是很详细的介绍,尝试了一些方法后发现可以用Attr.EnableID开启来解决
Attr.EnableID
//<a name="anchor"></a>为了展示这行的name属性 $config->set('Attr.EnableID', true);
bootstrap里面有些使用了标签属性,比如role、data-taggle之类的属性,是没法直接注册进HtmlPurifier,需要通过动态的添加方法来注册
$dom->addAttribute("li", 'role', 'Text'); $dom->addAttribute("ul", 'role', 'Text'); $dom->addAttribute("a", 'data-toggle', 'Text'); $dom->addAttribute("a", 'role', 'Text');
No Leanote account? Sign up now.