如何使Redcarpet可选择过滤HTML标签?

时间:2016-10-27 09:26:28

标签: ruby-on-rails ruby redcarpet

我想将一些HTML标记列入白名单,例如<kbd></kbd>,以便我可以为所有键盘快捷键显示漂亮的键盘图标。我怎样才能做到这一点?

下面的代码片段是我目前用于将Markdown字符串转换为HTML的函数。

  def markdown_to_html(markdown_str)
    options = {
      filter_html: true,
      link_attributes: { rel: 'nofollow', target: '_blank' },
      no_styles: true
    }

    extensions = {
      autolink: true,
      fenced_code_blocks: true,
      footnotes: true,
      highlight: true,
      no_intra_emphasis: true,
      quote: true,
      space_after_headers: true,
      strikethrough: true,
      superscript: true,
      tables: true
    }

    renderer = Redcarpet::Render::HTML.new(options)
    markdown = Redcarpet::Markdown.new(renderer, extensions)

    markdown.render(markdown_str).html_safe
  end

1 个答案:

答案 0 :(得分:0)

使用sanitize和您自己的自定义清理程序类。

此类可以与控制器类位于同一文件中。

class MarkdownScrubber < Rails::Html::PermitScrubber
  def initialize
    super
    self.tags = %w( kbd )
    self.attributes = []
  end

  def skip_node?(node)
    node.text?
  end
end

然后在致电render时使用它:

renderer = Redcarpet::Render::HTML.new(options)
markdown = Redcarpet::Markdown.new(renderer, extensions)
sanitize(markdown.render(markdown_str), scrubber: MarkdownScrubber.new)