【问题标题】:Un-markdown text?取消降价文本?
【发布时间】:2012-02-12 19:55:11
【问题描述】:

所以我使用 Markdown 来格式化来自用户的文本输入:

http://michelf.com/projects/php-markdown/

但我这样做是破坏性的,所以在数据库更新之前文本会变成 HTML。在屏幕上显示时可以将其转换回markdown吗?原因是我希望允许用户编辑该文本,并且需要以原始形式...

【问题讨论】:

  • 不容易,但你可以有一些误差。我的问题是,当它占用更多空间时,为什么要将 HTML 存储在数据库中?
  • 我现在实际上会将它存储两次。保留 markdown 以供编辑和易于转换的 html 以供显示。 (当然,单独的缓存也可以。)

标签: php html markdown


【解决方案1】:

你试过http://milianw.de/projects/markdownify/吗?

但是,我应该注意,您通常不应该在数据库中存储显示格式。值得考虑将 markdown 存储在 DB 中并按需将其转换为 HTML。

【讨论】:

  • 这是个坏建议。您应该将 both 存储在数据库中。这样您就可以保留原件以便在编辑器中加载,并且不会浪费处理时间在每次页面加载时转换您的原件。
  • @AndrewHeath 我不同意。您可能想要缓存转换后的表单,但最好在 memcache 之类的东西中完成,而不是在永久持久的数据库中完成。您可以提出“存储比时间更便宜”的论点,但扩大数据库实际上会让双方都付出代价——更大的数据库意味着更高的平均访问延迟。这也是 DRY 违规:如果数据库存储相同信息的两个副本,则这两个副本必须保持同步。此外,只有在您知道自己需要速度之后才能以牺牲简洁设计为代价来优化性能。
  • @AndrewHeath 实际上,将转换后的表单存储在数据库中可能会比按需转换。如果相关站点的处理器速度较快但硬盘驱动器速度较慢,则可能会出现这种情况 - 降价比它所代表的 HTML 更简洁,并且数据库大小超过 2 倍意味着更少的数据库适合 RAM .在运行基准测试之前,做出这样的决定是非常不明智的——过早的优化是魔鬼。
  • 我尊重你的立场,但你是我见过的唯一一个在 SO 上提倡它的人。其他相关问题总是提出 Markdown 和 HTML 的双存储方法。除非我们正在考虑 Alexa 级别的流量,否则似乎很难想象在交付 HTML 时硬盘驱动器速度会成为问题的场景。我认为选择和打印的简单性和速度在这里是一种更好的方法。但是 cmets 适合这样的讨论,所以提问者可以做出更明智的决定。
  • @AndrewHeath 我不相信我是第一个支持这个职位的人。如果同时存储 markdown 和 HTML,则数据库架构不能是 3NF。规范化数据库表是非常常见的,并且有很多关于它的问题。我提出性能的原因是为了反驳您的“浪费处理时间”评论 - 永远不要说“这会更好,因为它更快”,直到您确定需要并运行基准测试。优化和悲观化是同一枚硬币的两个方面。
【解决方案2】:

您的数据库中应该有两列:原始输入(markdown 语法)和您的 post-markdown HTML。

当页面被加载时,你拉取 HTML。

如果用户想要编辑,你可以使用原始的 markdown 语法,并在编辑完成后覆盖存储在数据库中的 HTML。

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2020-12-03
    • 1970-01-01
    • 2022-10-05
    • 2017-12-03
    • 2014-09-26
    相关资源
    最近更新 更多