0

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

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

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

 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 %>
4

2 回答 2

0

我想我会使用 Redcarpet 的filter_html: true选项来防止来自 iframe 等的任何安全问题。然后我不需要清理文本,因此它不会在 pre 标签内转义文本,并且可以正常显示。我只需要看看如何配置它,这样用户就不能使用像标题这样分散注意力的东西。

于 2014-01-09T18:12:07.280 回答
0

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

只需删除您对.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
于 2014-01-09T17:22:06.643 回答