htmlpurifier - 如何使用 HtmlPurifier 向元素添加属性?
问题描述
我正在寻找使用 HtmlPurifier 包净化 HTML 并向某些元素添加属性。具体来说,我想向<div>
和<p>
元素添加类,以便:
<div>
<p>
Hello
</p>
</div>
被纯化/转化为:
<div class="div-class">
<p class="p-class">
Hello
</p>
</div>
如何使用 HtmlPurifier 进行此操作?是否可以?
解决方案
我相信你可以通过按照这些思路做一些事情来做到这一点(尽管请把它当作伪代码,这个场景最后一次对我有用是几年前):
class HTMLPurifier_AttrTransform_DivClass extends HTMLPurifier_AttrTransform
{
public function transform($attr, $config, $context) {
$attr['class'] = 'div-class';
return $attr;
}
}
class HTMLPurifier_AttrTransform_ParaClass extends HTMLPurifier_AttrTransform
{
public function transform($attr, $config, $context) {
$attr['class'] = 'p-class';
return $attr;
}
}
$htmlDef = $this->configuration->getHTMLDefinition(true);
$div = $htmlDef->addBlankElement('div');
$div->attr_transform_post[] = new HTMLPurifier_AttrTransform_DivClass();
$para = $htmlDef->addBlankElement('p');
$para->attr_transform_post[] = new HTMLPurifier_AttrTransform_ParaClass();
如果您还没有,请记住将 和 的属性class
列入白名单。div
p
也就是说,乍一看,HTML Purifier 似乎不适合这种逻辑,因为添加类名与您网站的安全性无关(或者是吗?)。如果您已经在使用 HTML Purifier 将您的 HTML 标签、属性和值列入白名单,并且只想利用其 HTML 解析功能进行一些轻量级的附加 DOM 操作,我认为没有特别的理由不这样做。:) 但可能值得考虑是否要使用其他进程添加类(例如,在前端,如果这与您的用例相关)。
推荐阅读
- mysql - passport.authenticate() 返回未定义的用户
- javascript - 单击时 JQuery on('click') 不起作用
- python - 如何在python django服务器(rest框架)上仅显示整个列表存储中的特定数据
- c# - 在富域模型中使用应用级设置
- java - 子类和超类中同名的变量
- oracle - Oracle Apex - 在可变数组表字段中保存数字列表
- c++ - 无法从 C 调用 C++ 代码而不会出错
- c++ - 尝试使用递归找到二维数组中的最小数字
- python - Odoo V10 - 翻译文件
- java - Spring Integration JDBC 入站轮询器基于 Java 的配置