3

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>

4

2 回答 2

3

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

除非自从我上次检查该库(大约一年前)以来发生了一些根本性的变化,否则这并不完全正确 - 如果您想教授 HTML Purifier本身不知道的新属性,则存在该部分。例如,如果您想教您的 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

于 2013-06-20T18:05:52.713 回答
-1

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

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

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

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

于 2013-06-20T13:13:40.737 回答