如何通过HTML Purifier允许<audio>元素?

时间:2016-07-05 08:06:42

标签: php html html5-audio htmlpurifier

如何使用HTML Purifier允许元素?

我已尝试$config->set('HTML.Allowed', 'audio');,但现在它会删除所有其他元素,包括<p>, <br>等。

然后我尝试$def->addAttribute('audio', 'src', 'CDATA');,但它无效。

1 个答案:

答案 0 :(得分:1)

HTML.Allowed是所有允许标记的白名单,因此您可能想要做的是将$config->get('HTML.Allowed'),audio连接为值。

也就是说,HTML Purifier的安全方法是HTML风格识别 - 就像在白名单标签和属性中一样,它还确保标签在他们所处的环境中有意义并且属性值看起来像预期的那样,这意味着它必须实际理解您正在提供的HTML定义。例如,您不希望在<td>标记中嵌入<div> - 标记,这是没有意义的;你不会想要width="foo"在你的HTML中,这也毫无意义。

据我所知,HTML Purifier仍然不知道HTML5的方式,<audio>标签可能不是它本身就知道的标签。您必须查看"Customize!" end-user documentation,它会告诉您如何添加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);
     

每个参数对应于我们提出的问题之一。请注意,我们在action属性的末尾添加了一个星号,表示它是必需的。如果有人指定没有该属性的表单,则该标记将被删除。此外,最后的额外行是一个特殊的额外声明,可以防止表单彼此嵌套。

一旦您按照这些说明使您的净化例程了解<audio>,就可以将标记<audio>添加到您的配置白名单中。