为什么我需要使用Markdown?

11
我需要一个类似 WMD 的前端编辑器和 Markdown,这是为什么呢?当从 WMD 编辑器发送内容时,Markdown 对内容做了什么呢?
Markdown 在后端如何存储内容?是像 *bold* 这样的方式还是其他格式?为什么我不能只进行 html 编码

如果我听起来很幼稚,对不起。

4个回答

35

diagram

      


1
用什么绘图工具制作的呢?;) - Koobz
1
PowerPoint 2007гҖӮжңүи¶Јзҡ„жҳҜпјҢжҲ‘и¶ҠжқҘи¶ҠеӨҡең°дҪҝз”ЁWordжҲ–PowerPointеҲ¶дҪңз…§зүҮеҸҚе°„е’ҢжјӮдә®зҡ„еӣҫеҪўгҖӮ - Eduardo Molteni
有时使用Markdown的问题在于你的用户很愚蠢,并且不在乎他们可以输入好老式的纯文本。你的用户习惯于将格式不良、样式差、MS WordHTML 粘贴到任何矩形文本输入框中。你的用户是无能的白痴,当他们想强调文本时,他们只想点击那个巨大的 B 和倾斜的 I,然后就完成了。 - snicker

13

可能有必要退后一步,问一些更大的问题。 Markdown试图解决的问题是浏览器中的富文本编辑。考虑这个:在某个点上,为了使任何软件能够启用富文本,它必须以某种方式描述丰富性。

我们可以称该丰富性的描述(通过丰富性的描述,我指像“这段文字是粗体”或“这段文字是超链接”),我们可以将该丰富性的描述称为“标记”——它使用元“丰富性”标记文本。

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

对于选择隐藏的人,最终结果往往是所见即所得。用户对幕后发生的事情毫不知情。编辑器处理细节。以MS Word为例。没有人像常规用户一样操作Word标记格式。

对于选择公开标记的实现,需要一种标记语言来允许用户与其交互。这样的标记语言可能是HTML进行<tag>或者例如BB代码,做一些像[tag]的事情。

Markdown就是其中一种语言。

与我提到的前一种类型相反,Markdown尝试设计自己,以使标记呈现普通ASCII人员已经使用的内容。例如,人们常用星号来设置其文本,*important*,而这种记法在Markdown中是斜体的指示符。

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

在我所构建的大多数系统中,我会存储Markdown格式的文本,并将其标准化为另外一个字段,该字段用于缓存Markdown渲染后的HTML内容。这样,我就不必针对每个Markdown字段进行Markdown->HTML渲染。尽管需要更多的空间,但我宁愿让用户获得更快的响应,而不是使用更少的数据库存储空间。
当从浏览器接收Markdown时,还应该注意过滤掉可能包含的<script>标签。由于大多数Markdown实现也会识别与Markdown格式混合的HTML内容,因此为确保安全,您需要确保输入和缓存经过适当的净化。

好吧,我们不想混乱的地方就是在ReadMe文件中。结果很糟糕且难以阅读。我尚未找到适用于Mac的体面的阅读器,其中具有查找等高级功能。当然,它很适合创建网页,但是给人们.md文件,那真是太糟糕了,这些人在想什么? - zaph

3
使用除HTML以外的备用编码系统的原因是出于安全考虑。
Markdown和其他类似维基风格的编码系统通常不支持脚本语言。
HTML通过多种方式支持脚本语言(
两个主要的安全问题是:
1. 恶意软件罪犯使用用户生成的内容中的脚本,通过脚本访问已知的安全漏洞,尝试在读取内容的计算机上执行恶意操作。 2. 免费加载程序使用脚本来破坏站点的其他部分,例如更改内容框架或样式,例如广告、菜单、标志等。如果不仅仅是令人讨厌的话,这也可能是犯罪行为。
通过使用诸如Markdown之类的中间语言,您可以完全控制呈现的输出。
过滤HTML是可能的,但也很复杂且存在风险。
另一个重要的原因是强制执行样式的备用编码系统。正常的HTML有太多选项了。通过限制可用选项,用户只能使用某些样式。这通常会使内容看起来更干净,更易读(将SO与Ebay进行比较)。

3
使用Markdown的主要原因是标记文本的可读性。例如,您可以将其发送到纯文本电子邮件中,读者仍然可以理解强调、项目符号和段落等内容。
关于存储数据的问题,取决于具体情况。如果您在WordPress博客引擎中启用了Markdown,则它将按照用户输入的方式将数据存储为Markdown格式。然而,在Stack Overflow中,数据似乎是以HTML形式存储的。至少,“Stack Overflow数据转储”包含HTML而不是Markdown(我看到有人们抱怨必须将其转换回来)。
如果您使用WMD编辑器,可以向用户展示转换为HTML后的输出效果。尽管Markdown语法确实非常简单,但很容易犯错误。因此,最好向用户显示输出结果。
使用Markdown而不是所见即所得控件的另一个原因是,所见即所得控件允许用户在您在网页上显示的数据中使用HTML。因此,您必须决定何时仅仅是不正确的HTML,何时是恶意的XSS/CSRF/任何注入。在Markdown中,您只需将*something*转换为<b>something</b>,删除任何未知的HTML元素,然后完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接