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;
}
}
使用/安装类:
$htmlDef = $htmlPurifierConfiguration->getHTMLDefinition(true);
$tag = $htmlDef->addBlankElement('div');
$tag->attr_transform_post[] = new HTMLPurifier_AttrTransform_ContentEditable();
// purify down here
关于php - HTMLPurifier - 更改属性值而不是删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53036254/