我正在寻找一种方法来允许用户格式化他的文本。格式仅限于:
- 强调
- 斜体
- 大胆的
- 枚举
我想在服务器端使用 Markdown 并将 Markdown 转换为 HTML。
我的问题是 Markdown 支持的格式比我允许的要多得多(标题、表格、..)。
你知道我可以将下划线/斜体/粗体/..列入白名单的 Markdown 库吗?
如果没有白名单,我考虑使用 JSOUP 清理生成的 HTML。这是首选方式吗?
谢谢你。
有几种不同的方法可以实现这一点。您选择哪个取决于您使用的库(建议特定工具在 StackOverflow 上是题外话)以及您正在寻找的行为。您可以在下面找到每种方法的摘要。
一些解析器提供了一个 API 来允许您修改它们的行为。您也许可以删除解析表、标题等的点点滴滴,并将其余部分留在原处。然后,您的最终输出将保留这些功能的任何 Markdown 语法。例如,如果作者键入一个标题,他们会得到一个以散列开头的段落。
一些 Markdown 解析器分两步工作。在第 1 步中,解析器获取 Markdown 文本并输出抽象语法树 (AST),在第 2 步中,渲染器接受 AST 并输出 HTML。您可以修改默认渲染器或构建自定义渲染器,以根据需要处理每个元素。例如,您可以告诉“标题”渲染器方法输出一个段落(而不是标题),并且您可以选择该段落是否包含原始哈希。
使用您选择的 Markdown 解析器,将文本传入并在不修改的情况下获取输出。然后将 HTML 输出传递到一个 HTML sanitizer,它将去除所有不在白名单中的标签。在这种情况下,将不知道标头曾经是标头。在最终输出中,它看起来就像一个普通段落。