使用htmlpurifier的类的白名单元素

时间:2010-04-15 14:38:59

标签: php htmlpurifier

我想只允许span元素在htmlpurifier

中有某个类时才允许

有谁知道怎么做,现在我有

  $config->set('HTML.Allowed','a[href],p,ol,li,ul,img[src],blockquote,em,span[class]');
  $config->set('Attr.AllowedClasses',"allowed");

但是允许所有跨度并且只允许类允许我喜欢它只允许“允许”类但我只希望它允许跨类当它的类的值是“允许”时

感谢

4 个答案:

答案 0 :(得分:4)

临时解决方案:重新定义所需的范围内的类,并将其设置为具有N个可能的值。如果标签不存在,则需要将其删除。

答案 1 :(得分:2)

好的,基于Ambush-comander's建议,我能够删除所有没有特定类的跨度,这个想法是如果它需要的那个类那么元素就没有那个元素了除去。

我做了一些研究,发现htmlpurifier customize页面解释了如何按照他们的说明添加属性我只需要额外的四行代码,所以这就是我怎么做的

 // more configuration stuff up here
    $config->set('HTML.DefinitionID', 'enduser-customize.html editor');
    $config->set('HTML.DefinitionRev', 1);
    $def = $config->getHTMLDefinition(true);
    $def->addAttribute('span', 'class*', new HTMLPurifier_AttrDef_Enum(
      array('allowed')
    ));
 // purify down here

类中的*使得该类需要,因为我们只允许“允许”类,其他一切都被条带化。 现在,有一点需要注意这样做。如果有人把那个班级放在那里,那么在我的情况下我将不允许使用“允许”我正在使用其他将被html净化器取代的东西

别人

感谢伏击和粉红哥哥的帮助!

答案 2 :(得分:1)

您在my similar question留下了评论。我仍然没有解决方案,因为在我的情况下注射器/净化顺序是关键的,但注射器解决方案应该为你工作,因为你不依赖于'预处理',可以这么说。

据我所见,你有两个体面的 三个彻底的四个选项:

  1. 如果您不介意HTML中的遗留<span></span>标记,则可以在我的问题中使用属性解决方案来清空所有属性。如果您确实介意它们,您可以将该解决方案与an empty-tag-stripping injector结合起来,但是执行顺序很可能会使您再次陷入困境。 (所以我想。如果没有 - 非常棒,你有答案!:))

  2. 您可以使用注射器。它们是HTML Purifier的一个相当广泛和详细的功能,所以我无法想出一个能为你解决问题的例子。但!你可能想看一下the thread on the HTML Purifier forum where the injector 'Linkify' was created,这是对这个主题的一个相当彻底的看法,更不用说我在#1中提到的注入器也可以帮助你弄清楚它们。

  3. 我正在为我的目的调查的东西是PHP的内置DOM方法。如果由于某种原因导致#1和#2失败,这是一个可靠的替代方案,但就资源而言当然是昂贵的。

  4. 正则表达式。我真的只是提到这是最后的手段,它甚至不是一个严肃的建议。在已经纯化的 HTML上使用正则表达式可能是相当安全的,但它似乎浪费了一个好的HTML解析器。 (但是,诚然,#3也是如此。)

  5. 祝你好运。

答案 3 :(得分:0)

在docummentation中,没有关于配置属性值的信息。 但是,如果您只使用class一次,我认为如果您按照自己的意愿行事,就不会有任何问题。 ;)