You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用HtmlPurifier为HTML元素添加自定义属性?

HtmlPurifier给指定元素追加class属性实现方案

HtmlPurifier完全支持该需求,可通过自带的属性转换扩展点实现,具体操作步骤如下:

实现步骤

  1. 自定义属性转换类
    继承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;
    }
}
  1. 配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:45:09