当用户在我的网站上发布评论时,我会通过后端的清理过的markdown格式化程序运行它,然后在网站上显示它。
但是,这会导致小于号和大于号(<
和>
)的HTML代码(<
和&rt;
)用户的代码示例(标有<pre>
和<code>
标记)。括号在代码之外正确显示,但如何修复它们以便在代码中正确显示?
简而言之,我希望现在显示为:
if(a < 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 %>
答案 0 :(得分:0)
Rails已经是HTML-safe的文本,可以在视图中显示;因此,当您使用.html_safe
方法调用comment_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
答案 1 :(得分:0)
我想我会使用Redcarpet的filter_html: true
选项来防止来自iframe等的任何安全问题。然后我不需要清理文本,因此它不会在预标签内转义文本,并且它会正常显示。我只需要看看如何配置它,以便用户不能使用像标题这样的令人分心的东西。