首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >raw、html_safe和H来取消转义html

raw、html_safe和H来取消转义html
EN

Stack Overflow用户
提问于 2010-11-23 07:27:26
回答 5查看 287.2K关注 0票数 343

假设我有以下字符串

代码语言:javascript
复制
@x = "<a href='#'>Turn me into a link</a>"

在我的视图中,我希望显示一个链接。也就是说,我不希望@x中的所有内容都被取消转义并显示为字符串。使用以下命令有什么区别

代码语言:javascript
复制
<%= raw @x %>
<%= h @x %>
<%= @x.html_safe %>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-23 10:12:13

考虑到Rails 3:

html_safe实际上将字符串“设置”为HTML Safe (比这稍微复杂一点,但基本上就是这样)。这样,您就可以随意从帮助器或模型返回HTML安全字符串。

h只能在控制器或视图中使用,因为它来自帮助器。它将强制对输出进行转义。它并没有真正被弃用,但您很可能不再使用它了:唯一的用法是“还原”html_safe声明,这很不寻常。

使用raw作为表达式的前缀实际上等同于调用带有html_safe的链式to_s,但它是在帮助器上声明的,就像h一样,所以它只能在控制器和视图上使用。

"SafeBuffers and Rails 3.0“很好地解释了SafeBuffer是如何工作的(实现html_safe魔术的类)。

票数 398
EN

Stack Overflow用户

发布于 2013-08-10 16:12:53

区别在于Rails的html_safe()raw()。Yehuda Katz在这方面有一个很好的帖子,它真的可以归结为:

代码语言:javascript
复制
def raw(stringish)

  stringish.to_s.html_safe

end

是的,raw()html_safe()的包装器,它强制将输入转换为字符串,然后对其调用html_safe()。同样的情况是,raw()是模块中的帮助器,而html_safe()是String类上的方法,它创建了一个新的ActiveSupport::SafeBuffer实例-其中有一个@dirty标志。

请参阅"Rails’ html_safe vs. raw“。

票数 48
EN

Stack Overflow用户

发布于 2017-09-01 07:00:31

最安全的方式是:<%= sanitize @x %>

它将避免XSS!

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4251284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档