gpt4 book ai didi

java - 使用 jsoup 转义不允许的标签

转载 作者:行者123 更新时间:2023-11-29 08:09:10 25 4
gpt4 key购买 nike

我正在评估 jsoup对于将清理(但不删除!)非白名单标签的功能。我们只说<b>标签是允许的,所以下面的输入

foo <b>bar</b> <script onLoad='stealYourCookies();'>baz</script>

必须产生以下内容:

foo <b>bar</b> &lt;script onLoad='stealYourCookies();'&gt;baz&lt;/script&gt;

我看到以下关于 jsoup 的问题:

  • document.getAllElements()总是假设 <html> , <head><body> .是的,我可以打电话document.body().getAllElements()但关键是我不知道我的源是一个完整的 HTML 文档还是只是正文——我希望结果的形状和形式与它进来时相同;
  • 如何替换 <script>...</script>&lt;script&gt;...&lt;/script&gt; ?我只想用转义实体替换括号,不想更改任何属性等。Node.replaceWith这听起来有点矫枉过正。
  • 是否可以完全关闭 pretty-print (例如插入新行等)?

或者也许我应该使用另一个框架?我偷看了htmlcleaner到目前为止,但给出的示例并未表明支持我想要的功能。

最佳答案

答案 1

您如何使用 Jsoup 加载/解析您的 Document?如果您使用 parse()connect().get() jsoup 将自动格式化您的 html(插入 htmlbodyhead 标签)。这确保您始终拥有完整的 Html 文档 - 即使输入不完整。

假设您只想清理输入(没有进一步处理),您应该使用 clean() 而不是前面列出的方法。

示例 1 - 使用 parse()

final String html = "<b>a</b>";

System.out.println(Jsoup.parse(html));

输出:

<html>
<head></head>
<body>
<b>a</b>
</body>
</html>

输入html已完成,以确保您拥有完整的文档。

示例 2 - 使用 clean()

final String html = "<b>a</b>";

System.out.println(Jsoup.clean("<b>a</b>", Whitelist.relaxed()));

输出:

<b>a</b>

输入的 html 已清理,而不是更多。

文档:


答案2

replaceWith() 方法完全满足您的需求:

示例:

final String html = "<b><script>your script here</script></b>";
Document doc = Jsoup.parse(html);

for( Element element : doc.select("script") )
{
element.replaceWith(TextNode.createFromEncoded(element.toString(), null));
}

System.out.println(doc);

输出:

<html>
<head></head>
<body>
<b>&lt;script&gt;your script here&lt;/script&gt;</b>
</body>
</html>

仅正文:

System.out.println(doc.body().html());

输出:

<b>&lt;script&gt;your script here&lt;/script&gt;</b>

文档:


答案 3

是的,Jsoup.OutputSettingsprettyPrint() 方法执行此操作。

示例:

final String html = "<p>your html here</p>";

Document doc = Jsoup.parse(html);
doc.outputSettings().prettyPrint(false);

System.out.println(doc);

注意:如果 outputSettings() 方法不可用,请更新 Jsoup。

输出:

<html><head></head><body><p>your html here</p></body></html>

文档:


答案 4 (无项目符号)

不!Jsoup 是目前最好和最功能的 Html 库之一!

关于java - 使用 jsoup 转义不允许的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364540/

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