如何使用HtmlPurifier为HTML元素添加自定义属性?
HtmlPurifier给指定元素追加class属性实现方案
HtmlPurifier完全支持该需求,可通过自带的属性转换扩展点实现,具体操作步骤如下:
实现步骤
- 自定义属性转换类
继承HtmlPurifier内置的HTMLPurifier_AttrTransform类,实现对应标签的class注入逻辑:
class AddCustomClassTransform extends HTMLPurifier_AttrTransform { public function transform($attr, $config, $context) { $currentTag = $context->get('CurrentToken')->name; // 给div添加指定class if ($currentTag === 'div') { // 若要保留原有class可改为拼接逻辑:$attr['class'] = trim(($attr['class'] ?? '') . ' div-class'); $attr['class'] = 'div-class'; } // 给p添加指定class if ($currentTag === 'p') { $attr['class'] = 'p-class'; } return $attr; } }
- 配置HtmlPurifier并注册转换器
// 引入HtmlPurifier自动加载文件 require_once '你的HtmlPurifier存放路径/HTMLPurifier.auto.php'; // 初始化基础配置 $config = HTMLPurifier_Config::createDefault(); // 配置允许div、p标签使用class属性,可根据需求新增其他允许的标签和属性 $config->set('HTML.Allowed', 'div[class],p[class]'); // 获取HTML定义对象,注册自定义转换器 $htmlDefinition = $config->getHTMLDefinition(true); $htmlDefinition->info['div']->attr_transform_post[] = new AddCustomClassTransform(); $htmlDefinition->info['p']->attr_transform_post[] = new AddCustomClassTransform(); // 实例化净化器并处理内容 $purifier = new HTMLPurifier($config); // 待处理的原始HTML内容 $input = <<<HTML <div> <p> Hello </p> </div> HTML; $output = $purifier->purify($input);
处理完成后$output的输出结果就和你预期的完全一致。
补充说明
如果需要保留元素原有的class属性,只需要修改转换类中给$attr['class']赋值的逻辑,将新的class追加到原有值后面即可,不需要直接替换原有值。
内容的提问来源于stack exchange,提问作者iepure
相关产品推荐
相关产品推荐

