【问题标题】:Get HTMLPurifier 4.5 to allow only one tag获取 HTMLPurifier 4.5 以只允许一个标签
【发布时间】:2013-06-20 12:39:53
【问题描述】:

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>

【问题讨论】:

  • 我觉得 HTMLPurifier 可能有点过度架构了。

标签: htmlpurifier


【解决方案1】:

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

除非自从我上次检查该库(大约一年前)以来发生了一些根本性的变化,否则这并不完全正确 - 如果你想教授 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

【讨论】:

  • 谢谢。我以前做过类似的事情,但我认为最新版本已经改变了他们的 API。
【解决方案2】:

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

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

我不知道这与 HTMLDefinition 的关系如何。也许他们有一个兼容层。

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

【讨论】:

  • 我很困惑为什么你有那个if;查看htmlpurifier.org/live/INSTALL 的结尾 - 您应该能够在没有原始 HTML 定义获取的情况下设置这些配置值。
猜你喜欢
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多