使用Redcarpet和Markdown呈现原始HTML

4
我将使用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,我的Markdown将被解释,但用户输入的HTML也会被解释,这是不应该的。
有什么解决办法吗? 请注意,即使用户没有按照Markdown预期使用反引号`,也应该显示(但不解析)用户输入的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
为什么不在用户提交代码时解析它并用Markdown将其标识为代码呢?或者让用户使用正确的Markdown。既然他们已经添加了星号,为什么不能添加反引号来表示代码呢? - Jon
将Redcarpet替换为Pandoc?https://github.com/alphabetum/pandoc-ruby - mb21
1个回答

1
如果我理解正确,您只是想要将<code>作为普通文本而不是HTML元素。
为此,您需要用反斜杠转义<>
I *want* to write \<code\>

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