使用自定义WMD编辑器标记HTML

时间:2009-12-05 03:46:03

标签: markdown wmd

对于我的应用程序,我稍微定制了WMD的行为方式,因此当用户输入空行时,这些会在HTML输出中反映为<br />'s。现在我来到了一个点,我应该把它存放在后端的某个地方,所以在经过SO帖子一段时间之后,我不确定最好的方法是什么。我有几个选择,如果你能指出哪些优点/缺点值得赞赏。

  1. 发送到服务器并存储为markdown而不是HTML。对我来说,明显的优势是保持与用户最初输入完全相同的格式。但是,如何将其转换回HTML以显示给客户端? 在客户端转换它似乎很麻烦,即使可能会因为JS被禁用会发生什么?如果我想在服务器上执行此操作,那么标记到HTML的标准服务器端实现可能会耗费资源。在您看来这会是一个问题吗?即使情况并非如此,正如我所提到的那样,我的WMD实现是自定义的,并且那些服务器端解决方案无论如何都不可能正确转换为降价,并且总会存在某些事情会转换错误的风险。

  2. 以转换后的HTML格式发送到服务器。与上面相同..在客户端进行转换会很困难,服务器端也可能出错。

  3. 发送原始markdown并转换HTML并存储两者。没有与在客户端或服务器端将markdown转换为HTML相关的性能问题。用户最初输入的标记总是相同,并且他们最初在预览中看到的HTML相同(尽管可能在php中进行了清理)。它必须占用两倍的存储空间,这是我最担心的。

  4. 我倾向于倾向于第三种解决方案,因为它似乎最简单,但是担心此解决方案需要的存储空间增加一倍。请记住,我对WMD的实现略有修改,而且我将使用PHP / MySql服务器端实现。

    除了我上面列出的3个选项外,还有其他可能解决我问题的方法吗?我是否错过了任何重要的内容,使其中一个选项优于其他选项?还有哪些优点/缺点适用于我列出的每个解决方案?它是如何在SO上实现的?我读到了somwhere他们使用选项3,所以如果它对SO来说足够好对我来说足够好:)但不确定它是否真的无论如何,那么它是如何完成的?

    另外请原谅我,但至少有一次我说StackOverflow是网上最好的DAMN资源,我真的很感谢所有在这里帮助别人的人!这里的网站和用户简直太棒了!

2 个答案:

答案 0 :(得分:2)

  

以markdown或转换后的HTML格式发送到服务器

从客户端接受markdown而不是HTML的一个原因是从客户端接受任意HTML存在安全风险:如果您接受HTML,那么客户端可能会向您发送包含恶意代码的HTML,您将存储该HTML返回(可能是另一个客户端:所以你最终将恶意代码发送给另一个客户端)。出于这个原因,最好只接受来自客户端的降价(而不是HTML)。

  

如果我想在服务器上执行此操作,那么标记到HTML的标准服务器端实现可能会耗费资源。在您看来这会是一个问题吗?

我不知道“标准服务器端实现”是什么,但我猜这个(生成HTML)是服务器应该能够进行的那种处理。

答案 1 :(得分:0)

第四节。选项是存储markdown,并在请求时使用服务器端库将markdown呈现给HTML,然后使用缓存来防止性能下降。

关于ChrisW的安全问题的评论 - 这是一个真正有效的关注自己清理输入的点。但是,不要错误地认为降价也是安全的。从我所看到的WMD和它的showdown.js处理器,你仍然可以提供HTML,它将留在那里。因此,使用WMD编辑器的人仍然可以在<script>或其他任何地方加入。

实际上谈论这个让我觉得我需要检查一下我目前的实现..