如何使用 HtmlPurifier 为元素添加属性?

How to add attributes to elements with HtmlPurifier?

我希望使用 HtmlPurifier 包净化 HTML 并向某些元素添加属性。具体来说,我想将 类 添加到 <div><p> 元素,这样:

<div>
    <p>
        Hello
    </p>
</div>

得到 purified/transformed 到这个:

<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();

记得将 divpclass 属性列入白名单,如果您还没有的话。

也就是说,乍一看,HTML Purifier 似乎不适合这种逻辑,因为添加 class 名称与您的安全无关网站(或者是?)。如果您已经在使用 HTML Purifier 将您的 HTML 标签、属性和值列入白名单,并且只想利用它的 HTML 解析功能进行一些轻量级的额外 DOM 操纵,我认为没有特别的理由不这样做。 :) 但可能值得反思一下是否要使用其他过程添加 classes(例如,在前端,如果这与您的用例相关)。