我在Ruby on Rails 7中使用redcarpet gem将Markdown渲染为HTML。问题是没有正确渲染代码块,它渲染为:
<code class="ruby">
def func
puts "Hello there"
end
</code>
字符串
正确的输出应该是上面没有代码标签的代码,如果我尝试渲染不同的语言,输出是相同的代码标签。
HTML呈现的是下一个:
<pre>
<code data-highlighted="yes" class="hljs language-ruby">
"<code "
<span class="hljs-keyword">class</span>
"="
<span class="hljs-string">"ruby"</span>
"> "
<span class="hljs-keyword">def</span>
<span class="hljs-title function_">func</span>
" puts "
<span class="hljs-string">"Hello there"</span>
<span class="hljs-keyword">end</span>
" <"
<span class="hljs-regexp">/code></span>
</code>
</pre>
型
下面是我的代码:
呈现Markdown的函数
def markdown(text)
options = {
no_links: false,
hard_wrap: true,
link_attributes: { target: "_blank" }
}
extensions = {
hard_wrap: true,
autolink: true,
no_intra_emphasis: true,
tables: true,
fenced_code_blocks: true,
strikethrough: true,
lax_spacing: true,
space_after_headers: true,
quote: true,
footnotes: true,
highlight: true,
underline: true
}
renderer = Redcarpet::Render::HTML.new(options)
Redcarpet::Markdown.new(renderer, extensions).render(text).html_safe
end
型
我调用markdown函数的代码:
<p class="break-words line-clamp-3"><%= markdown(post.body) %></p>
型
post.body包含所有的Markdown文本,对于这个例子,发送到markdown方法的文本是:
post.body的输出为
irb(main):005> Post.find(86).body
Post Load (0.3ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT $2 [["id", 86], ["LIMIT", 1]]
=> "```ruby\r\n\r\ndef func\r\n puts \"Hello there\"\r\nend\r\n\r\n```"
irb(main):006>
型
在形式上创建一个新的职位,我有一个文本区域,我允许这个领域的参数方法,我相信这不是问题。任何人谁面对这个问题已经可以帮助我解决这个错误,请?
1条答案
按热度按时间fd3cxomn1#
现在你正在将Markdown渲染成HTML,然后将所有这些都传递给highlight.js,这将导致你的输出。
保持语法突出显示的最简单的解决方案是覆盖RedCarpet生成代码块的方式
例如
字符串
然后将
renderer = Redcarpet::Render::HTML.new(options)
替换为renderer = CustomRender.new(options)
。例如