我为什么需要Markdown?

时间:2010-01-26 07:32:47

标签: html markdown wmd

为什么我需要Markdown前面的编辑​​编辑器WMD?降价对WMD编辑器发送的内容有何作用? Markdown如何将内容存储在后端?它是否与*bold*或其他格式相同?为什么我不能只做html encode

对不起,如果我听起来很天真。

4 个答案:

答案 0 :(得分:32)

答案 1 :(得分:12)

退后一步并提出一些更大的问题可能会有所帮助。 Markdown试图解决的问题是浏览器中的丰富编辑问题。考虑一下:在某些时候,对于任何支持富文本的软件,它必须以某种方式描述丰富性,不过可能是这样。

我们可以称之为丰富的描述(通过丰富的描述,我的意思是“这一点文字是粗体”或“这一点文字是一个超链接),我们可以称之为丰富的”标记“ - 它用“丰富”元素标记文本。

富文本的实现可以采用两种方法,a。)隐藏用户的标记或b。)让他们可以访问标记。

对于那些选择隐藏它的人来说,最终结果往往是WYSIWYG。用户无视幕后发生的事情。编辑负责细节。以MS Word为例。没有人将Word标记格式作为常规最终用户进行操作。

对于选择公开标记的实现,然后使用标记语言以允许用户与其进行交互。这样的标记语言就像执行<tag>或BB代码的HTML一样,做[tag]之类的事情。

Markdown就是这些语言中的一种。

与我之前提到的类型相反,Markdown尝试设计自己,以便标记呈现常见的ASCII人已经使用。例如,人们通常用星号标注它们的文本来设置*important*,而Markdown中的这种表示法是斜体的指示。

关于存储,正如Stephan指出的那样,系统很可能会存储原始降价,因为用户很可能需要进行编辑,并且可以为此目的调用原始降价。

在我构建的大多数系统中,我存储了markdown,然后将其标准化为第二个字段,该字段缓存了markdown的HTML呈现。这样我就不必为每个降价字段进行markdown-&gt; HTML呈现。它需要更多的空间,但我宁愿用户比使用更少的数据库存储空间有更快的响应。

从浏览器接受Markdown时也要小心,因为它可以轻松包含需要过滤掉的<script>标记。大多数降价实现还会识别与Markdown格式混合的HTML,因此为了安全起见,您需要确保正确清理输入和缓存。

答案 2 :(得分:3)

使用Markdown的主要原因是标记文本的可读性。例如,您可以通过纯文本电子邮件发送它,读者仍然可以理解根本,子弹,文本将分为段落等。

当您询问存储数据时,这取决于。如果您在WordPress博客引擎中启用Markdown,它会在用户输入数据时存储数据 - 在Markdown中。但是,在Stack Overflow中,似乎数据存储为HTML。至少,“Stack Overflow数据转储”包含HTML,而不是Markdown(我见过people complaining),他们必须将其转换回来。)

如果使用WMD编辑器,则可以向用户显示转换为HTML后输出的外观。即使Markdown语法 非常简单,也不容易出错。因此,最好向用户显示输出。

使用Markdown而不是WYSIWIG控件的另一个原因 - WYSIWIG控件允许用户在您在网页上显示的数据中使用HTML。所以,你必须是那个决定什么时候只有不正确的HTML以及它是一个邪恶的XSS / CSRF /什么注入的人。在Markdown中,您只需将*某些*转换为<b>something</b>,删除所有未知的HTML元素即可。

答案 3 :(得分:3)

使用HTML以外的替代编码系统的原因是为了安全

Markdown和其他此类wiki风格的编码系统通常不支持脚本语言

HTML以多种方式支持脚本语言(

两个主要的安全问题是:

  1. 恶意软件犯罪分子在用户生成的内容中使用脚本通过脚本来尝试对内容阅读器计算机上的恶意软件操作以访问已知的安全漏洞

  2. 免费加载程序使用脚本通过更改内容框架或样式(如广告,菜单,徽标等)来破坏网站的其余部分。如果不仅仅是烦人的话,这也可能是犯罪行为

  3. 通过使用Markdown等中间语言,您可以完全控制渲染输出

    可以过滤HTML,但也很复杂且有风险

    替代编码系统的另一个重要原因是执行样式。普通HTML有太多选项。通过限制可用选项,用户只能使用某些样式。通常会使内容更清晰,更易读(比较SO到Ebay)