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

Posted

技术标签:

【中文标题】Ruby on Rails:.html_safe 和 sanitize() 之间的区别【英文标题】:Ruby on Rails: difference between .html_safe and sanitize() 【发布时间】:2014-07-02 19:37:37 【问题描述】:

我认为有两段代码:

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

<%= '<h3>winter</h3>'.html_safe %>

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

【问题讨论】:

请注意 .sanitize 在 5.1 中已从 Rails 中删除 (github.com/rails/rails/issues/28947) 【参考方案1】:

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

a = a.html_safe 只会将字符串 a 标记为 'html_safe' 并在之后将其视为 (Marks a string as trusted safe. It will be inserted into HTML with no additional escaping performed. It is your responsibility to ensure that the string contains no malicious content. This method is equivalent to the raw helper in views. It is recommended that you use sanitize instead of this method. It should never be called on user input.)

另一方面,a.sanitize 将对所有标签进行 html 编码并去除所有未明确允许的属性(如果需要,您可以添加/删除允许的标签和属性)。请注意,除非您特别允许带有 raw (http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/raw) 的 html 标记,否则默认情况下会过滤用户输入,顺便说一下,它使用 html_safe 来标记它。

【讨论】:

那么sanitize('&lt;h3&gt;winter&lt;/h3&gt;').html_safe 是多余的吗? @lucas 确实是的

以上是关于Ruby on Rails:.html_safe 和 sanitize() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

html_safe 在 rails 的 link_to 标题属性中不起作用

ruby on rails如何安装

ruby on rails - 问题捆绑安装nokogiri 1.7.2 on ruby on rails 4.x.

Ruby on Rails入门篇

markdown [rails:devise] Ruby on Rails的身份验证gem。 #ruby #rails

ruby Ruby on Rails:常见路由