gra*_*tur 318 ruby-on-rails erb
假设我有以下字符串
@x = "<a href='#'>Turn me into a link</a>"
Run Code Online (Sandbox Code Playgroud)
在我看来,我想要显示一个链接.也就是说,我不希望@x中的所有内容都被取消转义并显示为字符串.使用之间有什么区别
<%= raw @x %>
<%= h @x %>
<%= @x.html_safe %>
Run Code Online (Sandbox Code Playgroud)
?
Fáb*_*sta 385
考虑Rails 3:
html_safe实际上"设置字符串"为HTML安全(它比这更复杂,但它基本上是它).这样,您可以随意从帮助程序或模型返回HTML安全字符串.
h只能在控制器或视图中使用,因为它来自帮助器.它将强制输出转义.它并没有真正被弃用,但你很可能不再使用它了:唯一的用法是"恢复"一个html_safe声明,非常不寻常.
预先设置表达式raw实际上等同于在其上调用to_schained html_safe,但是在辅助函数上声明,就像h它一样,因此它只能在控制器和视图上使用.
" SafeBuffers和Rails 3.0 "是一个很好的解释,是关于SafeBuffers(html_safe魔术的类)是如何工作的.
小智 109
我认为它值得重复:html_safe没有没有 HTML转义的字符串.实际上,它会阻止你的字符串被转义.
<%= "<script>alert('Hello!')</script>" %>
Run Code Online (Sandbox Code Playgroud)
将放:
<script>alert('Hello!')</script>
Run Code Online (Sandbox Code Playgroud)
进入你的HTML源代码(耶,非常安全!),同时:
<%= "<script>alert('Hello!')</script>".html_safe %>
Run Code Online (Sandbox Code Playgroud)
将弹出警报对话框(你确定这是你想要的吗?).所以你可能不想调用html_safe任何用户输入的字符串.
小智 46
区别在于Rails html_safe()和raw().耶胡达·卡茨(Yehuda Katz)就此发表了一篇很好的文章,它真的归结为:
def raw(stringish)
stringish.to_s.html_safe
end
Run Code Online (Sandbox Code Playgroud)
是的,raw()是一个包装器html_safe(),强制输入到String然后调用html_safe()它.它也是raw()模块中的帮助器,而html_safe()String类上的方法是一个新的ActiveSupport :: SafeBuffer实例 - 它有一个@dirty标志.
请参阅"Rails'html_safe与raw ".
Dee*_*ale 29
html_safe :
将字符串标记为可信安全.它将被插入到HTML中,而不会执行其他转义.
"<a>Hello</a>".html_safe
#=> "<a>Hello</a>"
nil.html_safe
#=> NoMethodError: undefined method `html_safe' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)raw :
raw只是一个包装html_safe.使用raw,如果有机会,该字符串会nil.
raw("<a>Hello</a>")
#=> "<a>Hello</a>"
raw(nil)
#=> ""
Run Code Online (Sandbox Code Playgroud)h别名html_escape:
一种用于转义HTML标记字符的实用方法.使用此方法可以转义任何不安全的内容.
在Rails 3及更高版本中,它默认使用,因此您不需要显式使用此方法
| 归档时间: |
|
| 查看次数: |
254541 次 |
| 最近记录: |