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>
答案 0 :(得分:1)
我不认为有一种简单的方法可以将属性的处理方式更改为强制已知好值,而不是仅仅丢弃坏值。您可能需要编写属性转换;像这样的东西:
class HTMLPurifier_AttrTransform_ContentEditable extends HTMLPurifier_AttrTransform
{
public function transform($attr, $config, $context)
{
if (array_key_exists('contenteditable', $attr)) {
$attr['contenteditable'] = 'true';
}
return $attr;
}
}
使用/安装课程:
$htmlDef = $htmlPurifierConfiguration->getHTMLDefinition(true);
$tag = $htmlDef->addBlankElement('div');
$tag->attr_transform_post[] = new HTMLPurifier_AttrTransform_ContentEditable();
// purify down here