将HTML转换为Markdown

10

我有一个应用程序,管理员可以创建文章,我使用Markitup Markdown编辑器添加标题等。现在,在我的视图中,我想将此Markdown文本转换为HTML。

因此,在我的视图中,例如,当管理员编写文章时,他写example,在视图中,文本以粗体显示。

我希望您理解并能够帮助我。

我安装了Redcarpet,并将其放入我的应用程序助手中:

module ApplicationHelper


 def markdown(text)
if text
  markdown = Redcarpet::Markdown.new(
    Redcarpet::Render::HTML.new
  )
  markdown.render(text).html_safe
end

请在我的展示页面中加入以下内容:

并将其呈现如下:

 <%= markdown(@article.content) %>

我重启了服务器,但是出现了一个错误:

未初始化的常量ApplicationHelper::Redcarpet 编辑2:

谢谢,所有的都正常工作了!!!


module ApplicationHelper 之前添加 require 'redcarpet' - rails_id
当我添加 require 'redcarpet' 时,现在出现了这个错误:缺少帮助程序文件 helpers/redcarpet.rb。 - Florian Dano Clement
3个回答

16

看起来你需要这个gem

以简单的方式将现有的html转换为markdown,例如如果你想将现有的标签导入基于markdown的应用程序中。

一个简单的html到Markdown Ruby gem 我们喜欢markdown,因为它易于编辑。所以我们希望一切都是Markdown

HTML到Markdown转换器。

Upmark使用非常棒的Parslet gem定义了一个解析表达式语法(PEG)。然后使用此PEG将HTML转换为Markdown,具体分为4个步骤:

  1. 将XHTML解析成抽象语法树(AST)。
  2. 将AST规范化为HTML元素的嵌套哈希。
  3. 标记应该忽略的块和跨级子树(表格,div,span等)。
  4. 将AST叶子转换为Markdown。

未初始化的常量ApplicationHelper :: Redcarpet

module ApplicationHelper之前加入require 'redcarpet'

require 'redcarpet'
module ApplicationHelper


  def markdown(text)
    Redcarpet.new(text).html_safe
  end
end

16

kramdown 宝石提供了纯 Ruby 的 HTML 到 Markdown 解决方案。

irb> html = 'How to convert <b>HTML</b> to <i>Markdown</i> on <a href="http://stackoverflow.com">Stack Overflow</a>.'
=> "How to convert <b>HTML</b> to <i>Markdown</i> on <a href=\"http://stackoverflow.com\">Stack Overflow</a>."
irb> document = Kramdown::Document.new(html, :html_to_native => true)
=> <KD:Document: ... >
irb> document.to_kramdown
=> "How to convert **HTML** to *Markdown* on [Stack Overflow][1].\n\n\n\n[1]: http://stackoverflow.com\n"

1
Kramdown是最好的Markdown解析器(例如:为Jekyll提供支持)。已点赞。 - Master of Ducks

4

您可以使用redcarpet宝石在Rails中将Markdown编译为HTML。


有了redcarpet,您可以执行以下操作:

# application_helper.rb
module ApplicationHelper

  def markdown(text)
    if text
      markdown = Redcarpet::Markdown.new(
        Redcarpet::Render::HTML.new
      )
      markdown.render(text).html_safe
    end
  end
end

# some_view.html.erb
<%= markdown(@article.body) %>

我使用redcarpet,但出现了错误“未初始化常量ActionView :: CompiledTemplates :: Redcarpet”,但我遵循了Railscasts的指导。 - Florian Dano Clement
你重启了Rails服务器吗? - Daniel
好的,我添加了一个示例Markdown助手方法,它可以将您的Markdown渲染为HTML。希望这有所帮助。 - Daniel
我遇到了相同的错误:未初始化常量ApplicationHelper :: Redcarpet。 - Florian Dano Clement
在将 gem 'redcarpet' 添加到 Gemfile 文件后,你是否运行了 bundle install 命令?如果我从我的 Gemfile 文件中删除它,我会遇到同样的错误。 - Daniel
问题是将HTML转换为markdown,而不是将markdown转换为HTML。 - noraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接