Rails 是否应该自动转义 Flash 消息?如果没有,如何确保消息被转义(不使用CGI::escapeHTML
)?
经过一番搜索,我发现它应该被转义,并且得到了 html_safe 一条消息以显示 html。但是当我尝试
flash[:error] = "<b>YO</b>"
它显示为粗体YO而不是<b>YO</b>
. 请注意,字符串对象本身不是 html_safe。
Rails 是否应该自动转义 Flash 消息?如果没有,如何确保消息被转义(不使用CGI::escapeHTML
)?
经过一番搜索,我发现它应该被转义,并且得到了 html_safe 一条消息以显示 html。但是当我尝试
flash[:error] = "<b>YO</b>"
它显示为粗体YO而不是<b>YO</b>
. 请注意,字符串对象本身不是 html_safe。
您应该html_safe
在控制器中使用您想要转义的 Flash 消息。它从视图中删除原始函数。
flash[:error] = "<b>YO</b>".html_safe
处理此问题的正确方法是在您显示 Flash 消息的最后位置,这很可能是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