Как разрешить элементы ‹аудио› с помощью HTML Purifier?

Как я могу разрешить элементы с помощью HTML Purifier?

Я пробовал $config->set('HTML.Allowed', 'audio');, но теперь он удалит все остальные элементы, включая <p>, <br> и т. д.

Затем я попробовал $def->addAttribute('audio', 'src', 'CDATA');, но это не сработало.


person user2335065    schedule 05.07.2016    source источник
comment
Это не работает, это недостаточно хорошо описанная проблема, я предлагаю добавить больше информации.   -  person peterh    schedule 08.07.2016


Ответы (1)


HTML.Allowed — это белый список всех разрешенных тегов, поэтому вы, вероятно, хотите объединить $config->get('HTML.Allowed') с ,audio в качестве значения.

Тем не менее, подход HTML Purifier к безопасности основан на HTML-разновидностях — например, вместо того, чтобы просто добавлять теги и атрибуты в белый список, он также гарантирует, что теги имеют смысл в контексте, в котором они находятся, а значения атрибутов выглядят так, как ожидалось, что означает, что он должен на самом деле понять определение HTML, которое вы ему передаете. Например, вы не хотите, чтобы тег <td> был встроен в тег <div>, это не имеет смысла; и вы бы не хотели width="foo" в своем HTML, это тоже не имеет смысла.

Поскольку, насколько я знаю, HTML Purifier до сих пор не разбирается в HTML5, тег <audio>, вероятно, не является тем, о котором он изначально знает. Вам нужно будет просмотреть "Настроить!" документация конечного пользователя, где рассказывается, как добавлять теги и атрибуты, о которых HTML Purifier не знает.

Процитируем самый яркий пример кода из связанной документации (этот код учит HTML Purifier работе с тегом <form>):

Время для некоторого кода:

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // remove this later!
$def = $config->getHTMLDefinition(true);
[...]
$form = $def->addElement(
    'form',   // name
    'Block',  // content set
    'Flow', // allowed children
    'Common', // attribute collection
    array( // attributes
        'action*' => 'URI',
        'method' => 'Enum#get|post',
        'name' => 'ID'
    )
);
$form->excludes = array('form' => true);

Каждый из параметров соответствует одному из заданных нами вопросов. Обратите внимание, что мы добавили звездочку в конец атрибута действия, чтобы указать, что это необходимо. Если кто-то укажет форму без этого атрибута, тег будет удален. Кроме того, дополнительная строка в конце — это специальное дополнительное объявление, которое предотвращает вложение форм друг в друга.

После того, как вы выполнили эти инструкции, чтобы ваша процедура очистки знала о <audio>, добавление тега <audio> в ваш белый список конфигурации будет работать.

person pinkgothic    schedule 06.07.2016