HTMLPurifier - измените значение атрибута вместо удаления - PullRequest
0 голосов
/ 29 октября 2018

htmlpurifier удаляет атрибуты, если значение не разрешено.Например;

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

Я установил разрешения для тегов div для атрибута contenteditable, поэтому значение может быть только 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>

1 Ответ

0 голосов
/ 10 ноября 2018

Я не думаю, что есть простой способ изменить обработку атрибута на принуждение заведомо хорошего значения, а не просто сбросить плохое значение.Возможно, вам придется написать преобразование атрибута;как то так:

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
...