可能有必要退后一步,问一些更大的问题。 Markdown试图解决的问题是浏览器中的富文本编辑。考虑这个:在某个点上,为了使任何软件能够启用富文本,它必须以某种方式描述丰富性。
我们可以称该丰富性的描述(通过丰富性的描述,我指像“这段文字是粗体”或“这段文字是超链接”),我们可以将该丰富性的描述称为“标记”——它使用元“丰富性”标记文本。
富文本的实现可以采取两种方法,即a)隐藏用户不可见的标记或b)让他们访问标记。
对于选择隐藏的人,最终结果往往是所见即所得。用户对幕后发生的事情毫不知情。编辑器处理细节。以MS Word为例。没有人像常规用户一样操作Word标记格式。
对于选择公开标记的实现,需要一种标记语言来允许用户与其交互。这样的标记语言可能是HTML进行<tag>
或者例如BB代码,做一些像[tag]
的事情。
Markdown就是其中一种语言。
与我提到的前一种类型相反,Markdown尝试设计自己,以使标记呈现普通ASCII人员已经使用的内容。例如,人们常用星号来设置其文本,*important*
,而这种记法在Markdown中是斜体的指示符。
关于存储,正如Stephan指出的那样,系统很可能会存储原始的markdown,因为用户很可能需要编辑的可能性,并且可以为此目的调用原始markdown。
在我所构建的大多数系统中,我会存储Markdown格式的文本,并将其标准化为另外一个字段,该字段用于缓存Markdown渲染后的HTML内容。这样,我就不必针对每个Markdown字段进行Markdown->HTML渲染。尽管需要更多的空间,但我宁愿让用户获得更快的响应,而不是使用更少的数据库存储空间。<script>
标签。由于大多数Markdown实现也会识别与Markdown格式混合的HTML内容,因此为确保安全,您需要确保输入和缓存经过适当的净化。<b>something</b>
,删除任何未知的HTML元素,然后完成。