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

Hen*_*ipa 11 markdown markdownsharp pagedown

StackExchange站点使用MarkDown语法编写问题和答案.这是使用客户端的PageDown和服务器端的MarkDownSharpJeff的HTML清理程序构建.我正在考虑建立一些非常相似的东西.

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

bal*_*pha 18

最重要的原因:

  1. 我们希望Stack Exchange站点的最基本(在"基础"意义上)功能,无论是查询还是回答,都可以在没有JavaScript的情况下工作.最先进的东西,如投票,标记,UI细节,帮助文本,收藏,全球收件箱,以及诸如此类需要JavaScript,这没关系.但是,网站不能没有的一件事 - 问答 - 不应该有这个要求,以保持尽可能低的摩擦.

    当然,如果您没有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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

    现在你有一个帖子,其中最后一个编辑来自一个受信任的用户,支持答案,但有一个链接,我们宁愿没有人点击.

    修订历史(见第2点)甚至不会显示链接已更改.

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