当前位置:  开发笔记 > 前端 > 正文

raw vs html_safe vs. h to unescape html

如何解决《rawvshtml_safevs.htounescapehtml》经验,为你挑选了5个好方法。

假设我有以下字符串

@x = "Turn me into a link"

在我看来,我想要显示一个链接.也就是说,我不希望@x中的所有内容都被取消转义并显示为字符串.使用之间有什么区别

<%= raw @x %>
<%= h @x %>
<%= @x.html_safe %>



1> Fábio Batist..:

考虑Rails 3:

html_safe实际上"设置字符串"为HTML安全(它比这更复杂,但它基本上是它).这样,您可以随意从帮助程序或模型返回HTML安全字符串.

h只能在控制器或视图中使用,因为它来自帮助器.它将强制输出转义.它并没有真正被弃用,但你很可能不再使用它了:唯一的用法是"恢复"一个html_safe声明,非常不寻常.

预先设置表达式raw实际上等同于在其上调用to_schained html_safe,但是在辅助函数上声明,就像h它一样,因此它只能在控制器和视图上使用.

" SafeBuffers和Rails 3.0 "是一个很好的解释,是关于SafeBuffers(html_safe魔术的类)是如何工作的.


我不会说`h`会被弃用.使用"你好#{h @ user.name}".html_safe`是很常见的并且是可接受的用法.
请注意,在实践中`raw`和`html_safe`之间存在细微差别:`raw(nil)`返回空字符串,而`nil.html_safe`抛出异常.
字符串#html_safe实际上返回一个ActiveSupport :: SafeBuffer的实例,它包装了原始字符串并且是#html_safe?.原始字符串不会变成#html_safe?在它上面调用#html_safe之后.
`h`不会"恢复"html_safe声明.当一个字符串是`html_safe`时,`h`什么都不做.

2> 小智..:

我认为它值得重复:html_safe没有没有 HTML转义的字符串.实际上,它会阻止你的字符串被转义.

<%= "" %>

将放:

<script>alert('Hello!')</script>

进入你的HTML源代码(耶,非常安全!),同时:

<%= "".html_safe %>

将弹出警报对话框(你确定这是你想要的吗?).所以你可能不想调用html_safe任何用户输入的字符串.


换句话说,html_safe不是"请使这个html安全",它是相反的 - 你是程序员告诉rails"这个字符串是html安全的,保证!"
它确实应该在rails源代码中重命名为`.unescape_html`.

3> 小智..:

区别在于Rails html_safe()raw().耶胡达·卡茨(Yehuda Katz)就此发表了一篇很好的文章,它真的归结为:

def raw(stringish)

  stringish.to_s.html_safe

end

是的,raw()是一个包装器html_safe(),强制输入到String然后调用html_safe()它.它也是raw()模块中的帮助器,而html_safe()String类上的方法是一个新的ActiveSupport :: SafeBuffer实例 - 它有一个@dirty标志.

请参阅"Rails'html_safe与raw ".



4> Deepak Mahak..:

    html_safe :

    将字符串标记为可信安全.它将被插入到HTML中,而不会执行其他转义.

    "Hello".html_safe
    #=> "Hello"
    
    nil.html_safe
    #=> NoMethodError: undefined method `html_safe' for nil:NilClass
    

    raw :

    raw只是一个包装html_safe.使用raw,如果有机会,该字符串会nil.

    raw("Hello")
    #=> "Hello"
    
    raw(nil)
    #=> ""
    

    h别名html_escape:

    一种用于转义HTML标记字符的实用方法.使用此方法可以转义任何不安全的内容.

    在Rails 3及更高版本中,它默认使用,因此您不需要显式使用此方法



5> Guilherme Y...:

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

它会避免XSS!

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有