11

为什么我需要一个带有像WMD这样的前端编辑器的Markdown?Markdown 对从 WMD 编辑器发送的内容有什么作用? Markdown 如何将内容存储在后端?它是相同的方式还是其他格式?为什么我不能只做一个html 编码
*bold*

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

4

4 回答 4

35

图表

      

于 2010-02-05T14:38:00.150 回答
13

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

我们可以称这种丰富的描述(通过丰富的描述,我的意思是“这段文字是粗体的”或“这段文字是一个超链接),我们可以称这种丰富的描述为“标记”——它标记了具有元“丰富性”的文本。

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

对于那些选择隐藏它的人来说,最终结果通常是所见即所得。用户不知道幕后发生的事情。编辑负责细节。以 MS Word 为例。没有人像普通最终用户一样操纵 Word 标记格式。

对于选择公开标记的实现,然后使用标记语言以允许用户与其交互。这样的标记语言可以是 HTML 之类的东西,<tag>或者 BB 代码之类的东西,例如[tag].

Markdown 就是其中一种语言。

与我提到的前一种类型相反,Markdown 试图设计自己,以便标记呈现人们已经使用的常见 ASCII。例如,人们通常会在他们的文本中加上星号以将其关闭,*important*而 Markdown 中的这种符号是斜体的指示符。

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

在我构建的大多数系统中,我存储降价,然后将其规范化为第二个字段,该字段缓存降价的 HTML 呈现。这样我就不必为每个 markdown 字段做 markdown->HTML 渲染。它需要更多的空间,但我宁愿用户有更快的响应而不是使用更少的数据库存储空间。

从浏览器接受 Markdown 时也应该小心,因为它很容易包含<script>需要过滤掉的标签。大多数 Markdown 实现也会识别与 Markdown 格式混合的 HTML,为了安全起见,您需要确保正确清理输入和缓存。

于 2010-01-26T07:42:37.920 回答
3

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

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

如果您使用 WMD 编辑器,您可以向用户展示输出转换为 HTML 后的外观。尽管 Markdown 语法非常简单,但不难出错。因此,最好向用户显示输出。

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

于 2010-01-26T07:36:38.627 回答
3

使用 HTML 以外的其他编码系统的原因是出于安全考虑

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

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

两个主要的安全问题是:

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

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

通过使用诸如 Markdown 之类的中间语言,您可以完全控制呈现的输出

过滤 HTML 是可能的,但也很复杂且有风险

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

于 2010-02-03T20:53:21.173 回答