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

标签 php html htmlpurifier

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/

相关文章:

css - 将标题文本居中放置在 div 中但让其余文本左对齐的最佳方法?

javascript - 需要关闭自动完成脚本

javascript - Web 应用程序视口(viewport)问题

php - htmlpurifier,第三方源的过度净化

php - 净化后在我的 html 中

java - 用PHP代替JAVA进行PKCS5加密

php - cakephp 中的嵌套路由,关联模型

php - Auth::check() 在我的 Laravel 项目中似乎无法正常工作

php - Laravel-Snappy 抛出错误 500 没有更多信息

Laravel HTML 净化器