Laravel 将 Markdown 保存到数据库 - 不明白

Laravel Save Markdown to Database - Don't Understand

我不愿意 post 这个,但我很难理解降价实际上是如何 "saves" 到数据库的。

创建迁移时,我会添加列并指定值的类型(即整数、文本、字符串等),并且在网站操作过程中,用户会输入不同的信息,然后保存在数据库中。没问题。

我似乎无法理解降价过程。我读过有关保存 HTML 或保存 markdown 文件、在运行时呈现的信息,这些都是有利有弊的。

所以,假设我使用像 Tiny MCE 这样的编辑器,它将自身附加到文本区域。当我点击表格上的 "Submit" 时,它是如何运作的?验证如何工作?请随时直接回答我的问题或提供一些资源以帮助加深我的理解。我有一个基于 Laravel 构建的应用程序,所以我猜我需要使用像 https://github.com/GrahamCampbell/Laravel-Markdown 这样的包和一个编辑器(即 Tiny MCE)。

谢谢!

其实很简单

历史上,在论坛中使用了 BBCode,它们基本上是伪标签,允许您以某种方式格式化您的文本。例如 [b][/b] 曾经表示 "make this text bold"。在 Markdown 中,它会发生完全相同的事情,但使用 *text***text**.

等其他字符

发生这种情况是为了让您只允许您的用户使用特定格式,否则如果您允许编写纯 HTML、XSS(跨站点脚本)问题 会出现,这不是一个好主意。

然后您应该将 HTML 保存在数据库中。例如,您可以使用 markdown-js,这是一个 Markdown 解析器,可将 Markdown 解析为 HTML.

我看到 TinyMCE 默认不使用 Markdown,因为它是一个简单的 WYSIWYG 编辑器,但看起来 it also supports a markdown-like formatting.

Laravel-Markdown 是服务器端降价渲染助手,您可以在 Laravel Blade 视图上使用它。 markdown-js 是客户端,例如,它可用于实时显示您正在编写的内容的预览。

让我们从一个更基本的例子开始:Whosebug。当您 writing/editing 一个问题或答案时,您是在 textarea 字段中输入 Markdown 文本。 textarea 下方是预览,显示转换为 HTML.

的 Markdown 文本

它的工作方式(稍微简化)是 Whosebug 使用 JavaScript 库将 Markdown 解析为 HTML。此解析完全发生在客户端(在浏览器中),并且不会向服务器发送任何内容。 textarea 中的每一次按键都会快速更新预览,因为没有与服务器的来回交互。

但是,当您提交 question/answer 时,预览中的 HTML 将被丢弃,并且来自 textarea 的 Markdown 文本将转发到保存到的 Whosebug 服务器数据库。在某些时候,服务器还会将 Markdown 转换为 HTML,以便当另一个用户单独访问并请求查看 question/answer 时,服务器会将文档作为 HTML 发送给用户。我说 "at some point" 是因为这是您必须决定转换何时发生的地方。您有两个选择:

  1. 如果服务器在将 HTML 保存到数据库时转换它,那么它将保存到两列,一列用于 Markdown,一列用于 HTML .稍后,当用户请求 查看 文档时,将从数据库中检索 HTML 文档并返回给用户。但是,如果用户请求编辑文档,那么 Markdown 文档将从数据库中检索并返回给用户,以便她可以编辑它。

  2. 如果服务器只将Markdown文本存储到数据库,那么当用户请求查看文档时,Markdown文档将从数据库,转换为 HTML 然后返回给用户。但是,如果用户请求编辑文档,那么 Markdown 文档将从数据库中检索并返回给用户(跳过转换步骤),以便她可以对其进行编辑。

请注意,在任一选项中,服务器都将转换为 HTML。唯一一次在客户端(在浏览器中)发生转换是为了预览。但是 "preview" 转换不用于在编辑模式之外显示文档或将文档存储在数据库中。

Whosebug 和 TinyMCE 之间的唯一区别是在 TinyMCE 中预览也是编辑器。在幕后,相同的过程仍在发生,当您提交时,将 Markdown 发送到服务器。用于预览的HTML仍然被丢弃。

实施此类系统时的主要问题是,如果用于预览的 Markdown 实施与服务器使用的实施不同,则预览可能不是很准确。因此,通常最好选择两个非常相似的实现,或者如果可能的话,对两者使用相同的实现。