获取HTMLPurifier 4.5只允许一个标记

时间:2013-06-20 12:39:53

标签: htmlpurifier

HTMLPurifier默认允许我不想允许的很多标签。根据文档,您必须添加如下定义:

$config = HTMLPurifier_Config::createDefault();
if ($def = $config->maybeGetRawHTMLDefinition()) {
    $def->addAttribute('a', 'target', new HTMLPurifier_AttrDef_Enum(array('_blank','_self','_target','_top')));
}
$purifier = new HTMLPurifier($config);

问题是我找不到删除HTMLPurifier_Config::createDefault();所有标记的方法。

例如,HTML <div>Sometext</div>将使用上述初始化代码保留DIV标记。

如何将HTMLPurifier设置为仅允许<strong><a href="*"><p>

2 个答案:

答案 0 :(得分:3)

你说:“根据文档,你必须添加像这样的定义”。

除非自上次检查库(一年前,大约)以来发生了一些根本性的变化,否则这不完全正确 - 如果您想要教授HTML Purifier new 属性,那么该部分存在它本身并不知道。例如,如果您希望教您的HTML Purifier接受非标准<font>属性,例如align="",则需要更改原始HTML定义。

但是,如果您的白名单完全由常规HTML元素组成(而您的白名单也是如此!),则只需使用$config对象:

$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.AllowedElements', array(
    'strong','a','p'
));
$config->set('HTML.AllowedAttributes', array(
    'a.href'
));
$purifier = new HTMLPurifier($config);

那应该有用。你是否遇到了这个星座的问题?

(也请查看此文档:http://htmlpurifier.org/live/INSTALL

答案 1 :(得分:-1)

我找到的解决方案是使用旧的配置HTMLPurifier的方法;

if($def = $config->maybeGetRawHTMLDefinition()) {
    $config->set('HTML.AllowedElements', array(
        'strong','a','p'
    ));
    $config->set('HTML.AllowedAttributes', array(
        'a.href'
    ));
}

这与HTMLDefinition相关的工作原理我不知道。也许他们有一个兼容性层。

我最关心的是这不是使用返回的$def变量 - 而且我对配置所做的更改没有被缓存。