我的视图里有两段代码:
<%= sanitize('<h3>winter</h3>') %>
<%= '<h3>winter</h3>'.html_safe %>
它们似乎都会将提供的字符串中的HTML标签进行编码。它们之间有什么区别?我应该在什么情况下使用它们?
我的视图里有两段代码:
<%= sanitize('<h3>winter</h3>') %>
<%= '<h3>winter</h3>'.html_safe %>
它们似乎都会将提供的字符串中的HTML标签进行编码。它们之间有什么区别?我应该在什么情况下使用它们?
这是两种非常不同的方法。
a = a.html_safe
只是将字符串 a
标记为 'html_safe' 并在以后对其进行处理 (将字符串标记为受信任的安全内容。它将被插入HTML中,不会执行任何其他编码。您有责任确保字符串不包含任何恶意内容。此方法相当于视图中的raw
助手。建议使用sanitize
代替此方法。它不应该用于用户输入。)。
另一方面,a.sanitize
会对所有标签进行 HTML 编码,并剥离不明确允许的所有属性 (如果需要,可以添加或删除允许的标签和属性)。请注意,默认情况下将对用户输入进行清理,除非您使用raw
明确允许了 HTML 标记 (http://apidock.com/rails/ActionView/Helpers/OutputSafetyHelper/raw),顺便提一下,它使用html_safe
将其标记为这样的内容。
sanitize('<h3>winter</h3>').html_safe
是多余的吗? - lucas