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('<h3>winter</h3>').html_safe
是多余的吗?
@lucas 确实是的以上是关于Ruby on Rails:.html_safe 和 sanitize() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
html_safe 在 rails 的 link_to 标题属性中不起作用
ruby on rails - 问题捆绑安装nokogiri 1.7.2 on ruby on rails 4.x.