2016-07-05 4 views
1

Как я могу разрешать элементы с очистителем HTML?Как я могу разрешить <audio> элементы с очистителем HTML?

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

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

+0

«Это не работает» недостаточно хорошо описанной проблемы, я предлагаю добавить дополнительную информацию. – peterh

ответ

1

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

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

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

Цитирую самый яркий пример кода из связанной документации (этот код учит 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); 

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

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