如何在用户注释的代码中正确显示括号



当用户在我的网站上发表评论时,我会通过后端经过净化的降价格式化程序运行它,然后将其显示在网站上。

然而,这会导致小于号和大于号(<>)在用户的代码示例中(用<pre><code>标记)中出现它们的HTML代码(&lt;&rt;)。括号在代码外部正确显示,但如何修复它,以便它们在代码中正确显示?

简而言之,我想要现在显示为:

 if(a &lt; b)

显示为:

if(a < b)

这是我在帮助程序中的代码,用于标记用户的评论:

def comment_markdown(text)
  renderer = Redcarpet::Render::HTML.new()
  markdown = Redcarpet::Markdown.new(renderer)
  safe_text = sanitize text, tags: %w(b i code pre br p)
  markdown.render(safe_text).html_safe
end

它在视图中称为:

 <%= comment_markdown comment.text %>

Rails 已经是 HTML 安全的文本,可以在视图中显示;因此,当您在 comment_markdown 方法中调用 .html_safe 时,它会被转义两次。

只需删除您的呼叫.html_safe

def comment_markdown(text)
  renderer = Redcarpet::Render::HTML.new()
  markdown = Redcarpet::Markdown.new(renderer)
  safe_text = sanitize text, tags: %w(b i code pre br p)
  markdown.render(safe_text)
end

我想我只会使用 Redcarpet 的 filter_html: true 选项来防止 iframe 等出现任何安全问题。然后我不需要清理文本,所以它不会转义 pre 标签内的文本,并且它会正常显示。我只需要了解如何配置它,以便用户无法使用像标题这样分散注意力的东西。

相关内容

  • 没有找到相关文章

最新更新