我想只允许span元素在htmlpurifier
中有某个类时才允许有谁知道怎么做,现在我有
$config->set('HTML.Allowed','a[href],p,ol,li,ul,img[src],blockquote,em,span[class]');
$config->set('Attr.AllowedClasses',"allowed");
但是允许所有跨度并且只允许类允许我喜欢它只允许“允许”类但我只希望它允许跨类当它的类的值是“允许”时
感谢
答案 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留下了评论。我仍然没有解决方案,因为在我的情况下注射器/净化顺序是关键的,但注射器解决方案应该为你工作,因为你不依赖于'预处理',可以这么说。
据我所见,你有两个体面的 三个彻底的四个选项:
如果您不介意HTML中的遗留<span>
和</span>
标记,则可以在我的问题中使用属性解决方案来清空所有属性。如果您确实介意它们,您可以将该解决方案与an empty-tag-stripping injector结合起来,但是执行顺序很可能会使您再次陷入困境。 (所以我想。如果没有 - 非常棒,你有答案!:))
您可以使用注射器。它们是HTML Purifier的一个相当广泛和详细的功能,所以我无法想出一个能为你解决问题的例子。但!你可能想看一下the thread on the HTML Purifier forum where the injector 'Linkify' was created,这是对这个主题的一个相当彻底的看法,更不用说我在#1中提到的注入器也可以帮助你弄清楚它们。
我正在为我的目的调查的东西是PHP的内置DOM方法。如果由于某种原因导致#1和#2失败,这是一个可靠的替代方案,但就资源而言当然是昂贵的。
正则表达式。我真的只是提到这是最后的手段,它甚至不是一个严肃的建议。在已经纯化的 HTML上使用正则表达式可能是相当安全的,但它似乎浪费了一个好的HTML解析器。 (但是,诚然,#3也是如此。)
答案 3 :(得分:0)
在docummentation中,没有关于配置属性值的信息。
但是,如果您只使用class
一次,我认为如果您按照自己的意愿行事,就不会有任何问题。 ;)