繁体   English   中英

html标签上的Jsoup属性删除

[英]Jsoup attribute removal on html tags

我有一个问题,我想过滤某些可能包含 html 的文本。 我使用 jsoup 将标签列入白名单并清理这些标签,效果非常好。

我唯一的问题是某些标签可以包含属性,主要是样式或类,但也可能有不同的属性。 (名称、目标等)清理时这没有问题,因为它们会被很好地剥离,但是当将一些标签列入白名单时,这些标签会因属性而被阻止。 基本白名单似乎没有涵盖样式或类属性,而且我无法确定我遇到的其他情况。

由于我想允许使用相当广泛的标签,但在清理过程中删除了大部分标签,因此我不想为我允许的所有标签添加所有属性。 最简单的方法是从所有标签中去除所有属性,因为无论如何我对它们都不感兴趣,然后检查带有纯标签的剥离文本是否有效。

是否有删除所有属性或一些简单循环的函数,另一种选择是告诉白名单者忽略所有属性并简单地将标签列入白名单。

最终对我有用的解决方案非常简单。 我遍历所有元素,然后遍历所有属性,然后在元素上删除它们,这给我留下了一个干净的版本,我只需要验证 html 标签本身。 我认为这不是解决问题的最简洁方法,但它可以满足我的需求。

** 编辑 **

我多次为旧代码点赞,而它实际上包含一个绝对的初学者错误。 在迭代同一个列表时永远不能删除。 但是,此错误仅在删除多个属性时触发。

带有错误修复的更新代码:

Document doc = Jsoup.parseBodyFragment(aText);
Elements el = doc.getAllElements();
for (Element e : el) {
    List<String>  attToRemove = new ArrayList<>();
    Attributes at = e.attributes();
    for (Attribute a : at) {
        // transfer it into a list -
        // to be sure ALL data-attributes will be removed!!!
        attToRemove.add(a.getKey());
    }

    for(String att : attToRemove) {
        e.removeAttr(att);
   }
}


return Jsoup.isValid(doc.body().html(), theLegalWhitelist);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM