使用 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 <code>
问题是由于渲染器在解析 Markdown 时输出了转义的 html,我得到:
I <em>want</em> to write <code>
因此,我无法区分人们发送到服务器的 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】:如果我理解正确,您只想将 <code>
作为普通文本而不是 HTML 元素。
为此,您需要使用反斜杠转义 <
和 >
:
I *want* to write \<code\>
【讨论】:
以上是关于使用 Redcarpet 和 Markdown 渲染原始 html的主要内容,如果未能解决你的问题,请参考以下文章
使用 Redcarpet 的 Markdown 外部图像链接
Markdown 实时预览,如用于 rails 上 redcarpet 的 ***
如何扩展 Middleman 的 Redcarpet Markdown 渲染器?