与PageDown一起使用时,MarkDownSharp的用途是什么?

时间:2012-03-15 09:56:18

标签: markdown markdownsharp pagedown

StackExchange站点使用MarkDown语法编写问题和答案。这是使用客户端的PageDown和服务器端的MarkDownSharpJeff's HTML sanitizer构建的。我自己想要建立一些非常相似的东西。

我理解为什么我需要在服务器端清理HTML。但MarkDownSharp的目的是什么?为什么我不会在客户端使用PageDown从MarkDown转换为HTML并将其发送到服务器?

1 个答案:

答案 0 :(得分:18)

最重要的原因:

  1. 我们希望Stack Exchange网站最基本的(在“基本”意义上)功能,询问和回答,无需JavaScript即可 。最先进的东西,如投票,标记,UI细节,帮助文本,收藏,全球收件箱,以及诸如此类需要JavaScript,这没关系。但是网站不能没有的一件事--Q& A - 不应该有这个要求,以保持尽可能低的摩擦力。

    当然,如果您没有JavaScript作为要求,则不能要求客户端呈现Markdown。

  2. 我们只存储最新版本帖子的呈现HTML版本。对于过去的修订版,我们只存储Markdown源代码。为每次编辑存储两个版本将是一个巨大的空间浪费,因为几乎不需要旧版本。但有时需要它们,例如在修订历史中。因此,我们必须在服务器端进行渲染。

  3. 即使您在服务器端重新清理,允许客户端进行渲染显然也会消除您在Markdown中实际呈现的渲染版本中的信任。想象一下:

    我,一个邪恶的垃圾邮件发送者,发布了以下答案:

    As you can sea on [this awesome site][1],
    
    ... (long text on thread-safe usage of the turtle in LOGO) ...
    
    Hope that helps!
    
     [1]: http://almost-real-rolex-watches.biz
    

    但是我提交了一个渲染版本,其中链接实际上是关于乌龟并发错综复杂的相关网站。由于服务器需要Markdown源和我提供的HTML,因此它相信这个是由另一个制作的。

    Sean Sceat是着名的Stack Overflow用户,仅凭徽标标签就享有120k的声誉。他看到链接确实进入相关页面,喜欢答案,赞成它,发布“很棒的答案;你链接到的网站有很多有用的内容!”评论,虽然他在那里,他解决了错字“海” - > “看”(垃圾邮件制造者故意制作)。

    但点击“编辑”后编辑中的Markdown 包含相关链接;它包含劳力士链接。因此 - 肖恩不知道 - 他不仅修正了错字,还改变了链接去垃圾邮件发送者的网站。

    现在您有一个帖子,其中包含来自受信任用户的最后一次修改,支持答案,但是我们不想让用户点击该链接。

    修订历史(见第2点),甚至显示链接已更改。

  4. 应该注意的是,WMD JavaScript编辑器的原始版本实际上具有您描述的功能;您可以将其设置为将呈现的HTML提交到服务器。当我们以“PageDown”名称发布我们的重构版本时,我们最终删除了该功能,因为我们从未使用它,维护它,而且老实说我不知道​​它是否真的有效。