我正在寻找一种允许用户格式化文本的方法。格式仅限于:
我想使用Markdown并在服务器端将Markdown转换为HTML。
我的问题是Markdown支持的格式比我想要的多得多(标题,表格,......)。
你知道一个Markdown图书馆,我可以将白名单加下划线/斜体/粗体/...
如果没有白名单,我考虑用JSOUP清理生成的HTML。这是一种首选方式吗?
谢谢。
答案 0 :(得分:0)
有几种不同的方法可以实现。您选择哪个取决于您使用的库(建议特定工具在StackOverflow上偏离主题)以及您正在寻找的行为。您可以在下面找到每种方法的摘要。
某些解析器提供了一个API,允许您修改其行为。您也许可以删除解析表格,标题等的零碎文件,并将其余部分保留在原位。然后,您的最终输出将留下这些功能的任何Markdown语法。例如,如果作者键入标题,则会得到一个以哈希开头的段落。
一些Markdown解析器分两步完成。在步骤1中,解析器获取Markdown文本并输出抽象语法树(AST),在步骤2中,渲染器接受AST并输出HTML。您可以修改默认渲染器,也可以构建自定义渲染器,根据需要处理每个元素。例如,您可以告诉"标题"用于输出段落(而不是标题)的渲染器方法,您可以选择该段落是否包含原始哈希值。
使用您选择的Markdown解析器,传入文本并获取输出而不进行修改。然后将HTML输出传递给HTML清理程序,该清理程序将删除不在白名单中的任何标记。在这种情况下,将不知道标头曾经是标头。在最终输出中,它看起来就像一个常规段落。