ruby-on-rails-3 – 强制在Rails中的HTML转义3

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – 强制在Rails中的HTML转义3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到一个问题与rails自动转义.它目前认为一个字符串是html_safe(它是),但为了显示目的,我需要它仍然逃避html.这是字符串采取的步骤.
my_string = render(:partial => "set_string",:locals => {:item => @item})
<%= my_string %>

而部分是基本的

<h2>Page Header</h2>
<strong><%= item.name %></strong>
<%= item.body %>
etc

我的理解是,因为我直接在视图中显示文本(h2等),它假定它是安全的,它也正确地转义了项目输出,这使得整个my_string安全.所以,当我尝试显示

<%= my_string %>

它不会逃避剩下的html.我尝试添加h强制逃脱,但没有工作.

所以我的问题是,有没有办法强制html转义一个安全的字符串,除了调用字符串上的东西,这将使其不安全?

非常感谢你的帮助.

解决方法

从Rails 3中的ActiveSupport :: SafeBuffer中删除

在这种情况下,<%= my_string.to_str%>将根据需要进行双重转义.

SafeBuffer工作

当Rails转义字符串时,您将获得ActiveSupport :: SafeBuffer.从那时起,会跳过额外的转义,因为SafeBuffer是html_safe?这是一个聪明的解决方案!有时候,我们希望逃避这样的聪明才智.

为什么双重逃跑?

我需要重新转义标签助手生成内容,以将生成标记传递给数据属性.这也可以用于显示模板生成代码.

强制转义为html_safe的字符串?

调用SafeBuffer上的to_str,返回一个String.

# Example html safe content
content = content_tag :code,'codez<>'
content.html_safe? # true

# call .to_str
escaped = content.to_str
escaped.html_safe? # false

# The escaped String will now be re-escaped when used in a template

to_s gotcha

to_s方法看起来非常像to_str方法.不要在这里使用to_s,ActionView :: SafeBuffer#to_s只返回自己,在SafeBuffer上下文中调用to_str,返回一个自然不安全的字符串.

原文链接:https://www.f2er.com/ruby/265756.html

猜你在找的Ruby相关文章