Rails 4,flash消息中的链接未被解析为HTML

在控制器中,我有以下flash消息:

flash[:notice] = %Q[Please #{view_context.link_to('create a new account',new_account_path)},after that you will be able to create orders.].html_safe

这是布局中的闪存区域:

<div id="main_flash_area">
<% flash.each do |name,msg| %>
    <div class="alert text-center alert-info">
      <a class="close" data-dismiss="alert">&times; Закрыть</a>
      <%= msg %>
    </div>
<% end %>
</div>

它有点呈现为链接,但浏览器不会将其解析为链接.它显示

Please <a href="/accounts/new">create a new account</a>,after that you will be able to create orders.

生成的HTML:

<div id="main_flash_area">
    <div class="alert text-center alert-info">
      <a class="close" data-dismiss="alert">× Закрыть</a>
      Please &lt;a href="/accounts/new"&gt;create a new account&lt;/a&gt;,after that you will be able to create orders.
    </div>
</div>

如何使其成为正确的链接?我猜它逃脱了<一个>在某些时候标记.

解决方法

您需要在视图中清理闪存消息.

<%= sanitize(msg)%>

这将在视图中呈现链接而不是转义html.

请注意,这将适用于您应用中的所有Flash消息.如果您在flash消息中显示任何用户输入,则必须记住在显示它之前将其转义为Rails自动转义将不适用.

请注意,sanitize帮助程序不太容许原始帮助程序和它可以配置.它可以自动使用链接,默认情况下会删除脚本标记,如果您的闪存中有用户内容,则会提供一些保护,但您需要进行全面检查以确保不会引入任何安全问题.有关详细信息,请查看Rails文档.

相关文章

Chrome 无法显示使用插件的内容 Chrome 不再支持很多插件。不过网站创建者已经通过更安全的方式,将多数...
Flash 开发环境搭建和文字滚动效果实例 一、Flash 开发环境搭建 Flash发布的时候可以将资源(即将库中的...
方法一: 1、选择合适的yum源http://get.adobe.com/cn/flashplayer/进入此网址选择 “YUM,适用于Linux...
在做web开发中可能会遇到flash遮挡页面中元素的情况,无论怎么设置flash容器和层的深度(z-index)也无济...
chrome 45以上不自动播放&quot;非必要&quot;flash的一种可能解决方案chrome 45以上flash被拦截...
透过现象看本质 首先是个转场特效问题。 其实我早想到做法了,只是当时还没实践。增加混合(BlendMode....