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