gpt4 book ai didi

java - html标签上的Jsoup属性删除

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:00 29 4
gpt4 key购买 nike

我有一个问题,我想过滤某些可能包含 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);

关于java - html标签上的Jsoup属性删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233938/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com