Я не могу добавить пользовательский тег в HTML Purifier

Согласно http://htmlpurifier.org/docs/enduser-customize.html я попытался добавить пользовательский тег в htmlpurifier. Но это работает только для известных тегов, таких как ‹form› или ‹name›.

    require_once __DIR__ . '/htmlpurifier-4.10.0/library/HTMLPurifier.auto.php';

    $config = HTMLPurifier_Config::createDefault();

    $config->set('HTML.DefinitionRev', 1);
    $config->set('Cache.DefinitionImpl', null);
    $def = $config->getHTMLDefinition(true);

    $form = $def->addElement(
        'form',
        'Block',
        'Flow',
        'Common',
        array(
            'action*' => 'URI',
            'method' => 'Enum#get|post',
            'name' => 'ID'
        )
    );
    $form->excludes = array('form' => true);

    $vroundrect = $def->addElement(
        'v:roundrect',
        'Block|Inline',
        'Optional: Flow|Inline',
        'Common',
        array(
            'xmlns:v' => 'CDATA',
            'xmlns:w' => 'CDATA'
        )
    );
    $vroundrect->excludes = array('v:roundrect' => true);

    $mytag = $def->addElement(
        'mytag',
        'Block|Inline',
        'Optional: Flow|Inline',
        'Common',
        array(
        )
    );
    $mytag->excludes = array('mytag' => true);

    $purifier = new HTMLPurifier($config);
    print $purifier->purify(file_get_contents(__DIR__ . '/tmpHTML2.txt'));

Я пробовал HTML.Allowed следующим образом:

$validTags = '*[id|class|name],br,a[href|title|rel|target],' .
        'img[src|alt|height|width],div,' .
        'u,em,ul,ol,li,strong,span,mytag,v:roundrect,form[action|method]';
$config->set('HTML.Allowed', $validTags);

Это не работает. Независимо от того, что я не хочу заменять список доступных тегов, я хочу добавить новые теги в список доступных тегов.

tmpHTML2.txt: ‹v:roundrect ›
‹mytag ›mytag content‹/mytag›
‹form id=x method=POST action=http://sdsd.com›‹/form>;

результат: 11111111‹form action=http://sdsd.com›‹/form>;

теги ‹v:roundrect› и ‹mytag› игнорировались. Тег ‹form› был очищен больше, чем ожидалось.


person Eugene    schedule 21.06.2019    source источник
comment
Я нашел несколько ошибок в примере на htmlpurifier.org/docs/enduser-customize.html. В форме добавления тега используется разделитель invalis: Enum#get|post, но должен быть ,. Нравится этот Enum#ge,post. И если я заменю тип имени с ID на тег CDATA, ‹form› будет очищенным свойством. Купить Мне до сих пор не удалось добавить собственный тег, например ‹v:roundrect›   -  person Eugene    schedule 21.06.2019
comment
Просто быстрое предупреждение (не полный ответ, а, следовательно, просто комментарий) - очиститель HTML уже знает о <form>, но он спрятан в HTML. Trusted = true. См. htmlpurifier.org/phorum/read.php?3,5676. ,5677#msg-5677   -  person pinkgothic    schedule 21.06.2019


Ответы (1)


Я попробовал этот код на другом компьютере, и он работает. Я думаю, что это была проблема с кешем. Похоже на директиву $config->set('Cache.DefinitionImpl', null); не отключает кеш. Я попытаюсь удалить файлы из библиотеки/HTMLPurifier/DefinitionCache/Serializer. Что бы проблема не решилась.

person Eugene    schedule 21.06.2019