使用Redcarpet和Markdown渲染原始html

时间:2012-10-05 13:19:36

标签: html ruby-on-rails escaping markdown redcarpet

我正在使用Redcarpet作为Markdown渲染器,我希望能够显示html或任何带有<的文本。和>没有它被解析。

以下是应该发生的事情的说明:

用户输入

I *want* to write <code>

服务器发回该评论的来源应为

I <em>want</em> to write &lt;code&gt;

问题是因为渲染器在解析Markdown时输出转义的html,我得到:

I &lt;em&gt;want&lt;/em&gt; to write &lt;code&gt;

因此我无法区分人们发送到服务器的html和Redcarpet渲染器生成的html。如果我对此进行.html_safe,我的降价将被解释,但也是用户输入的html,不应该。

有关如何解决此问题的任何想法? 请注意,这个想法是显示(但不解析)用户输入的html,即使用户没有按照预期的标记使用反引号。

以下是相关的代码:

# this is our markdown helper used in our views
def markdown(text, options=nil)
    options = [:no_intra_emphasis => true, ...]

    renderer = MarkdownRenderer.new(:filter_html => false, ...)

    markdown = Redcarpet::Markdown.new(renderer, *options)
    markdown.render(text).html_safe
end

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您只需要<code>作为普通文本而不是HTML元素。

为此你需要用反斜杠转义<>

I *want* to write \<code\>