使用 flexmark-java 清理 markdown
Use flexmark-java to clean markdown
在 Java 应用程序中,我需要将标记的文本转换为简单的纯文本而不是 html(例如删除所有链接地址、粗体和斜体标记)。
哪种方法最好?我在考虑使用像 fleaxmark 这样的降价库。但是我第一眼找不到这个功能。它在那里吗?还有其他更好的选择吗?
编辑
Commonmark 通过使用 org.commonmark.renderer.text.TextContentRenderer
而不是默认的 HTML 渲染器支持渲染到文本。不确定它对换行符有何作用,但值得一试。
原始答案,使用 flexmark HTML + JSoup
理想的解决方案是为 flexmark 实现自定义渲染器,但这会迫使您为 markdown 中的所有语言功能编写 model-to-string。除非它支持开箱即用,但我不知道这个功能...
一个更简单的解决方案可能是使用 flexmark(或任何其他轻量级降价渲染器)并让它创建 HTML。之后,只需 运行 通过 https://jsoup.org/ 生成的 HTML 并让它提取文本:
Jsoup.parse(htmlInputStream).text();
String org.jsoup.nodes.Element.text()
Gets the combined text of this element and all its children. Whitespace is normalized and trimmed.
For example, given HTML <p>Hello <b>there</b> now! </p>
, p.text() returns Hello there now!
在使用 org.owasp.html.HtmlSanitizer
.
进行清理后,我们使用这种方法获取在富内容编辑器 (summernote) 中输入的文本的 "preview"
在 Java 应用程序中,我需要将标记的文本转换为简单的纯文本而不是 html(例如删除所有链接地址、粗体和斜体标记)。
哪种方法最好?我在考虑使用像 fleaxmark 这样的降价库。但是我第一眼找不到这个功能。它在那里吗?还有其他更好的选择吗?
编辑
Commonmark 通过使用 org.commonmark.renderer.text.TextContentRenderer
而不是默认的 HTML 渲染器支持渲染到文本。不确定它对换行符有何作用,但值得一试。
原始答案,使用 flexmark HTML + JSoup
理想的解决方案是为 flexmark 实现自定义渲染器,但这会迫使您为 markdown 中的所有语言功能编写 model-to-string。除非它支持开箱即用,但我不知道这个功能...
一个更简单的解决方案可能是使用 flexmark(或任何其他轻量级降价渲染器)并让它创建 HTML。之后,只需 运行 通过 https://jsoup.org/ 生成的 HTML 并让它提取文本:
Jsoup.parse(htmlInputStream).text();
String org.jsoup.nodes.Element.text() Gets the combined text of this element and all its children. Whitespace is normalized and trimmed.
For example, given HTML
<p>Hello <b>there</b> now! </p>
, p.text() returnsHello there now!
在使用 org.owasp.html.HtmlSanitizer
.