使用 Redcarpet 和 Markdown 渲染原始 html

Posted

技术标签:

【中文标题】使用 Redcarpet 和 Markdown 渲染原始 html【英文标题】:Rendering raw html with Redcarpet and Markdown 【发布时间】:2012-10-05 13:19:36 【问题描述】:

我正在使用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,即使用户没有像 Markdown 预期的那样使用反引号 `。

这是相关的代码:

# 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

【问题讨论】:

为什么在用户提交的时候不解析代码并用markdown将其包围以识别为代码?或者只是让您的用户使用正确的降价。既然他们已经添加了星号,为什么他们不能为代码添加反引号? 把红地毯换成 pandoc? github.com/alphabetum/pandoc-ruby 【参考方案1】:

如果我理解正确,您只想将 &lt;code&gt; 作为普通文本而不是 HTML 元素。

为此,您需要使用反斜杠转义 &lt;&gt;

I *want* to write \<code\>

【讨论】:

以上是关于使用 Redcarpet 和 Markdown 渲染原始 html的主要内容,如果未能解决你的问题,请参考以下文章

使用 Redcarpet 的 Markdown 外部图像链接

Markdown 实时预览,如用于 rails 上 redcarpet 的 ***

如何扩展 Middleman 的 Redcarpet Markdown 渲染器?

如何使用 Redcarpet for Rails 在 Markdown 中嵌入 YouTube 视频?

Ruby redcarpet 未正确解释 Markdown

Ruby/Redcarpet:从文本中去除降价