使用 jsoup 转义不允许的标签
我正在评估 jsoup 的功能,该功能可以清理(但不会删除!)非白名单标签。假设只允许使用 标签,因此以下输入
foo <b>bar</b> <script onLoad='stealYourCookies();'>baz</script>
必须产生以下结果:
foo <b>bar</b> <script onLoad='stealYourCookies();'>baz</script>
我在 jsoup 中看到以下问题:
document.getAllElements()
始终假定、
和
。是的,我可以调用
document.body().getAllElements()
但重点是我不知道我的源代码是完整的 HTML 文档还是只是正文 - 我想要结果与它进来时的形状和形式相同;- 如何用
替换
>?我只想用转义实体替换括号,不想更改任何属性等。
Node.replaceWith
听起来有点矫枉过正。 - 是否可以完全关闭漂亮的打印(例如插入新行等)?
或者也许我应该使用另一个框架?到目前为止,我已经浏览过 htmlcleaner ,但给定的示例并不表明支持我想要的功能。
I am evaluating jsoup for the functionality which would sanitize (but not remove!) the non-whitelisted tags. Let's say only <b>
tag is allowed, so the following input
foo <b>bar</b> <script onLoad='stealYourCookies();'>baz</script>
has to yield the following:
foo <b>bar</b> <script onLoad='stealYourCookies();'>baz</script>
I see the following problems/questions with jsoup:
document.getAllElements()
always assumes<html>
,<head>
and<body>
. Yes, I can calldocument.body().getAllElements()
but the point is that I don't know if my source is a full HTML document or just the body -- and I want the result in the same shape and form as it came in;- how do I replace
<script>...</script>
with<script>...</script>
? I only want to replace brackets with escaped entities and do not want to alter any attributes, etc.Node.replaceWith
sounds like an overkill for this. - Is it possible to completely switch off pretty printing (e.g. insertion of new lines, etc.)?
Or maybe I should use another framework? I have peeked at htmlcleaner so far, but the given examples don't suggest my desired functionality is supported.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
回答 1
如何使用 Jsoup 加载/解析您的
Document
?如果您使用parse()
或connect().get()
jsoup 将自动格式化您的 html (插入html
,body< /code> 和
head
标签)。这确保您始终拥有完整的 Html 文档 - 即使输入不完整。假设您只想清理输入(不需要进一步处理),您应该使用
clean()
而不是前面列出的方法。示例 1 - 使用 parse()
输出:
输入 html 已完成,以确保您拥有完整的文档。
示例 2 - 使用 clean()
输出:
输入 html 已清理,而不是更多。
文档:
答案 2
方法
ReplaceWith()
完全符合您的需要:示例:
输出:
或仅正文:
输出:
文档:
回答 3
是的,
Jsoup.OutputSettings
的prettyPrint()
方法可以做到这一点。示例:
注意:如果
outputSettings()
方法不可用,请更新Jsoup。输出:
文档:
答案 4 (无项目符号)
不! Jsoup 是最好和最功能最强 Html 库之一!
Answer 1
How do you load / parse your
Document
with Jsoup? If you useparse()
orconnect().get()
jsoup will automaticly format your html (insertinghtml
,body
andhead
tags). This this ensures you always have a complete Html document - even if input isnt complete.Let's assume you only want to clean an input (no furhter processing) you should use
clean()
instead the previous listed methods.Example 1 - Using parse()
Output:
Input html is completed to ensure you have a complete document.
Example 2 - Using clean()
Output:
Input html is cleaned, not more.
Documentation:
Answer 2
The method
replaceWith()
does exactly what you need:Example:
Output:
Or body only:
Output:
Documentation:
Answer 3
Yes,
prettyPrint()
method ofJsoup.OutputSettings
does this.Example:
Note: if the
outputSettings()
method is not available, please update Jsoup.Output:
Documentation:
Answer 4 (no bullet)
No! Jsoup is one of the best and most capable Html library out there!