Ruby on Rails:.html_safe和sanitize()之间的区别

lak*_*are 14 sanitize html-safe ruby-on-rails-4 difference

我的视图中有两段代码:

<%= sanitize('<h3>winter</h3>') %>

<%= '<h3>winter</h3>'.html_safe %>
Run Code Online (Sandbox Code Playgroud)

它们似乎都导致在提供的字符串中编码html标签.它们之间有什么区别,我应该何时使用?

lak*_*are 19

这是两种截然不同的方法.

a = a.html_safe只会将字符串标记a为'html_safe'并在之后对其进行处理(将字符串标记为可信安全字符.它将插入HTML而不执行其他转义.您有责任确保该字符串不包含恶意内容.此方法等同raw于视图中的 帮助器.建议您使用sanitize而不是使用此方法.永远不应该在用户输入上调用它.).

a.sanitize另一方面,html将对所有标签进行编码并删除所有非特定允许的属性(如果需要,可以添加/删除允许的标签和属性).请注意,默认情况下会对用户输入进行清理,除非您特别允许使用raw(http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/raw)html-markup,顺便说一下,html_safe这样做是为了标记它.

  • 那么 `sanitize('&lt;h3&gt;winter&lt;/h3&gt;').html_safe` 是多余的吗? (3认同)