【问题标题】:Rails 3 - How to escape flash messageRails 3 - 如何转义 Flash 消息
【发布时间】:2018-11-01 19:12:41
【问题描述】:

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

经过一番搜索,我发现它应该被转义,并且得到了 html_safe 一条消息以显示 html。但是当我尝试

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

它显示为粗体 YO 而不是&lt;b&gt;YO&lt;/b&gt;。请注意,字符串对象本身不是 html_safe。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 html-escape


    【解决方案1】:

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

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

    【讨论】:

    • 将其设为“html_safe”实际上可以防止字符串被转义。
    【解决方案2】:

    处理此问题的正确方法是在您显示 Flash 消息的最后位置,这很可能是 application.html.erb。改变

    <%= message %>
    

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

    <%= sanitize message %>
    

    请记住,始终将sanitize 应用于您的字符串所经过的管道终点处的字符串,以确保您获得您的风格。

    【讨论】:

      【解决方案3】:

      未使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多