gpt4 book ai didi

Jsoup - 如何通过转义而不删除不需要的 html 来清理 html?

转载 作者:行者123 更新时间:2023-12-04 08:45:46 44 4
gpt4 key购买 nike

有没有办法让 jsoup 通过转义不需要的 HTML 而不是完全删除它来清理包含 HTML 的字符串?我的例子:

String dirty = "This is <b>REALLY</b> dirty code from <a href="www.rubbish.url.zzzz">haxors-r-us</a>
String clean = Jsoup.clean(dirty, new Whitelist().addTags("a").addAttributes("a", "href", "name", "rel", "target"));

这给出了一个“干净”的字符串:
This is    REALLY    dirty code from <a href="www.rubbish.url.zzzz">haxors-r-us</a>

我想要的是“干净”的字符串:
"This is &lt;b&gt;REALLY&lt;/b&gt; dirty code from <a href="www.rubbish.url.zzzz">haxors-r-us</a>

最佳答案

假设正在解析字符串而不是 HTML 文档(根据您的问题),此方法将起作用:

public String escapeHtml(String source) {
Document doc = Jsoup.parseBodyFragment(source);
Elements elements = doc.select("b");
for (Element element : elements) {
element.replaceWith(new TextNode(element.toString(),""));
}
return Jsoup.clean(doc.body().toString(), new Whitelist().addTags("a").addAttributes("a", "href", "name", "rel", "target"));
}

您可以使“b”标签成为传递您希望转义的标签列表的参数。

相关的通过 JUnit 测试:
@Test
public void testHtmlEscaping() throws Exception {
String source = "This is <b>REALLY</b> dirty code from <a href=\"www.rubbish.url.zzzz\">haxors-r-us</a>";
String expected = "This is &lt;b&gt;REALLY&lt;/b&gt; dirty code from \n<a href=\"www.rubbish.url.zzzz\">haxors-r-us</a>";
String transformed = transformer.escapeHtml(source);
assertEquals(transformed, expected);
}

请注意,我在测试的“预期”字符串中的“a”标记之前添加了一行返回“\n”,因为 JSoup 格式化了页面。

关于Jsoup - 如何通过转义而不删除不需要的 html 来清理 html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756674/

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