Как разрешить элементы в то же время разрешить пользовательский атрибут в HTMLPurifier? - PullRequest
1 голос
/ 31 января 2020

Я собираюсь добавить пользовательский атрибут 'custom-type' с элементом "a", в то же время разрешить только элементы "h1" и "a".

Я пробую следующие коды:

    $config= HTMLPurifier_Config::createDefault();
    $config->set('Attr.EnableID',true);
    $def = $config->getHTMLDefinition(true);
    $def->addAttribute('a', 'custom-type', 'Text');
    $config->set('HTML.Allowed', 'h1,a[href|id|custom-type]');
    $html_purifier = new \HTMLPurifier($config);        
    $clean_html = $html_purifier->purify($str);

Он генерирует ошибки, как показано ниже:

"Невозможно установить директиву после завершения, вызванного в строке 69 в файле"

Мне интересно, что не так с вышеуказанными кодами. Любые предложения будут оценены.

1 Ответ

1 голос
/ 01 февраля 2020

Я решил этот вопрос. Он работает после изменения порядка вышеуказанных кодов следующим образом:

$config= HTMLPurifier_Config::createDefault();
$config->set('Attr.EnableID',true);
$config->set('HTML.Allowed', 'h1,a[href|id|custom-type]');
$def = $config->getHTMLDefinition(true);
$def->addAttribute('a', 'custom-type', 'Text');
$html_purifier = new \HTMLPurifier($config);        
$clean_html = $html_purifier->purify($str);

Сначала установите правила, затем установите для getHTMLDefinition (true) значение true, чтобы получить копию ранее установленных правил, наконец добавьте пользовательский атрибут.

...