HTMLPurifier - 更改属性值而不是删除

HTMLPurifier - Change attribute value instead of remove

如果值不允许,

htmlpurifier 将删除属性。例如;

<div contenteditable="true"></div>

我为contenteditable属性设置了div标签的权限,所以值只能是false。但是,如果 contenteditable="true"false 以外的任何其他内容,htmlpurifier 将完全删除该属性。我不喜欢这种行为。我想让 htmlpurifier 始终保留 contenteditable 属性并将其设置为 false.

有这种可能吗?

实际配置

$config = \HTMLPurifier_Config::createDefault();

$config->set('HTML.Allowed', 'div[contenteditable]');
$config->set('HTML.TargetNoopener', false);
$config->set('HTML.TargetNoreferrer', false);

$def = $config->getHTMLDefinition(true);
$def->addAttribute('div', 'contenteditable', 'Enum#false');

此配置的结果

输入:

<div contenteditable="true"></div>

输出:

<div></div>

想要的结果

输入:

<div contenteditable="true"></div>

输出:

<div contenteditable="false"></div>

我认为没有一种简单的方法可以将属性的处理方式更改为强制使用已知良好的值,而不是仅仅删除不良值。您可能需要编写一个属性转换;像这样:

class HTMLPurifier_AttrTransform_ContentEditable extends HTMLPurifier_AttrTransform
{
    public function transform($attr, $config, $context)
    {
        if (array_key_exists('contenteditable', $attr)) {
            $attr['contenteditable'] = 'true';
        }
        return $attr;
    }
}

Using/installing class:

$htmlDef = $htmlPurifierConfiguration->getHTMLDefinition(true);
$tag     = $htmlDef->addBlankElement('div');
$tag->attr_transform_post[] = new HTMLPurifier_AttrTransform_ContentEditable();
// purify down here