Rails 3 - 如何转义闪存消息



Rails应该自动转义闪存消息吗?如果没有,如何确保消息被转义(不使用CGI::escapeHTML)?

在做了一些搜索之后,我发现它应该被转义,并且必须html_safe一条消息来显示html。但是当我尝试时

flash[:error] = "<b>YO</b>"

它显示为粗体 YO,而不是<b>YO</b>。请注意,字符串对象本身并不html_safe。

处理

此问题的正确方法是在显示闪存消息的最终位置,这很可能是application.html.erb

更改
<%= message %>

  <% flash.each do |message_type, message| %>
    <div class="alert alert-<%= message_type %>"><%= message %></div>
  <% end %>

<%= sanitize message %>

请记住,始终在字符串经过的管道端点处将sanitize应用于字符串,以确保获得样式。

不使用

CGI::escapeHTML的问题。您可以在控制器中使用ERB::Util.html_escape

flash[:error] = escape_html('<b>Yo</b>')
....
private
  def escape_html(string_to_escape)
    ERB::Util.html_escape(string_to_escape)
  end

您应该在控制器中使用html_safe来传输要转义的闪存消息。它从视图中删除原始函数。

flash[:error] = "<b>YO</b>".html_safe

相关内容

  • 没有找到相关文章