Java转换器中将标记限制为下划线/粗体/斜体

Java转换器中将标记限制为下划线/粗体/斜体,java,markdown,wikitext,Java,Markdown,Wikitext,我正在寻找一种允许用户格式化文本的方法。格式设置仅限于: 下划线 斜体 大胆的 列举 我想在服务器端使用标记并将标记转换为HTML 我的问题是,降价支持的格式比我想允许的多得多(标题、表格等等) 你知道有一个降价库,我可以在那里把下划线/斜体/粗体/列为白名单 如果没有白名单,我想用JSOUP清理生成的HTML。这是首选的方式吗 谢谢。有几种不同的方法可以实现这一点。您选择哪一个取决于您使用的库(建议特定工具在StackOverflow上不在主题范围内)以及您想要的行为。您可以在下面找到每种

我正在寻找一种允许用户格式化文本的方法。格式设置仅限于:

  • 下划线
  • 斜体
  • 大胆的
  • 列举
我想在服务器端使用标记并将标记转换为HTML

我的问题是,降价支持的格式比我想允许的多得多(标题、表格等等)

你知道有一个降价库,我可以在那里把下划线/斜体/粗体/列为白名单

如果没有白名单,我想用JSOUP清理生成的HTML。这是首选的方式吗


谢谢。

有几种不同的方法可以实现这一点。您选择哪一个取决于您使用的库(建议特定工具在StackOverflow上不在主题范围内)以及您想要的行为。您可以在下面找到每种方法的摘要

修改标记解析器。 一些解析器提供API,允许您修改其行为。您也许可以删除解析表、头等的位和块,并保留其余的部分。然后,您的最终输出将保留这些特性的任何标记语法。例如,如果作者键入标题,他们将得到以哈希开头的段落

创建自定义渲染器。 一些标记解析器分两步工作。在步骤1中,解析器获取标记文本并输出抽象语法树(AST),在步骤2中,呈现器接受AST并输出HTML。您可以修改默认渲染器,也可以构建自定义渲染器,以根据需要处理每个元素。例如,您可以告诉“header”呈现器方法输出段落(而不是标题),并且可以选择该段落是否包含原始哈希

使用HTML消毒剂。
使用您选择的Markdown解析器,传入文本并在不修改的情况下获取输出。然后将HTML输出传递到HTML消毒剂中,该消毒剂将去除不在白名单中的任何标记。在这个场景中,没有任何线索表明头曾经是头。在最终输出中,它看起来就像一个常规段落。

通常,这是通过HTML消毒剂完成的。使用功能齐全的Markdown解析器,然后通过HTML净化程序传递输出,该净化程序去除所有未列入白名单的HTML标记。@Waylan,您可以添加注释作为答案。@Hal9k我添加了一个答案,建议使用几种不同的方法。