加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:38:36 所属栏目:百科 来源:网络整理
导读:我遇到一个问题与rails自动转义.它目前认为一个字符串是html_safe(它是),但为了显示目的,我需要它仍然逃避html.这是字符串采取的步骤. my_string = render(:partial = "set_string",:locals = {:item = @item})%= my_string % 而部分是基本的 h2Page Header/
我遇到一个问题与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,返回一个自然不安全的字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读