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>
?
答案 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
变量 - 而且我对配置所做的更改没有被缓存。