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