如何验证Markdown?

发布于 2024-07-08 10:19:21 字数 446 浏览 7 评论 0原文

可能会使用无效语法编写 Markdown 内容。 无效表示 BlueCloth 库无法解析内容并引发异常。 Rails 中的 markdown 帮助程序不会捕获任何 BlueCloth 异常,因此无法呈现完整页面(而是呈现 500 服务器错误页面)。

就我而言,用户可以编写 Markdown 内容并将其保存到数据库中。 如果有人使用无效语法,则该内容的所有连续呈现尝试都会失败(状态代码 500 - 内部服务器错误)。

您如何解决这个问题? 在保存到数据库之前是否可以在模型级别验证 Markdown 语法?

It's possible to write Markdown content with invalid syntax. Invalid means that the BlueCloth library fails to parse the content and throws an exception. The markdown helper in Rails doesn't catch any BlueCloth exceptions and because of that the complete page fails to render (500 Server Error page is rendered instead).

In my case, users are allowed to write Markdown content and save it to the database. If someone used invalid syntax, all successive rendering attempts of that content fail (Status Code 500 - Internal Server Error).

How do you get around this issue? Is it possible to validate the Markdown syntax at the Model-level before saving to the database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海的爱人是光 2024-07-15 10:19:22

您应该编写自己的验证方法,在其中初始化 BlueCloth 对象,并尝试调用 to_html 方法捕获任何异常。 如果捕获异常,则验证失败,否则应该没问题。

在你的模型中:

protected:

def validate
  bc = BlueCloth.new(your_markdown_string_attribute)
  begin
    bc.to_html
  rescue
    errors.add(:your_markdown_string_attribute, 'has invalid markdown syntax')
  end
end

You should write your own validation method in which you would initialize BlueCloth object, and try to call to_html method catching any exception. If you catch an exception, validation fails, otherwise it should be ok.

In your model:

protected:

def validate
  bc = BlueCloth.new(your_markdown_string_attribute)
  begin
    bc.to_html
  rescue
    errors.add(:your_markdown_string_attribute, 'has invalid markdown syntax')
  end
end
无戏配角 2024-07-15 10:19:22

我做了一些研究,并决定使用 RDiscount 而不是 BlueCloth。 RDiscount 似乎比 BlueCloth 更快、更可靠。

将 RDiscount 集成到您的 Rails 环境中很容易。 将以下片段包含在您的 environment.rb 中,您就可以开始使用了:(

begin
  require "rdiscount"
  BlueCloth = RDiscount
rescue LoadError
  # BlueCloth is still the our fallback,
  # if RDiscount is not available
  require 'bluecloth'
end

使用 Rails 2.2.0 进行测试)

I've done a bit of research and decided to use RDiscount instead of BlueCloth. RDiscount seems to be much faster and more reliable than BlueCloth.

It's easy to integrate RDiscount in your Rails environment. Include the following snipped in your environment.rb and you are ready to go:

begin
  require "rdiscount"
  BlueCloth = RDiscount
rescue LoadError
  # BlueCloth is still the our fallback,
  # if RDiscount is not available
  require 'bluecloth'
end

(tested with Rails 2.2.0)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文