何时(何时不)运行 `sanitize` 方法?

Posted

技术标签:

【中文标题】何时(何时不)运行 `sanitize` 方法?【英文标题】:When (and when not) to run the `sanitize` method? 【发布时间】:2019-08-28 05:03:42 【问题描述】:

我想明确知道何时在我的 Rails 5 应用程序中运行(以及何时不运行,例如因为它会自动运行)sanitize 方法。

例如,在我的视图文件中,嵌入在<%= ... %> 中,我应该使用这些吗?

sanitize(record.value)

link_to(sanitize(record.value), ...)

tag.span(sanitize(record.value))

t("translation_string_html", :argument_value => sanitize(record.value))

还是这些?

record.value

link_to(record.value, ...)

tag.span(record.value)

t("translation_string_html", :argument_value => record.value)

【问题讨论】:

【参考方案1】:

通常在使用 Rails 助手时不需要进行清理。

例如,如果您遵循link_to 方法到其末尾,则此处是相关行

https://www.rubydoc.info/github/rails/rails/ActionView%2FHelpers%2FTagHelper%2FTagBuilder:content_tag_string

def content_tag_string(name, content, options, escape = true)
  tag_options = tag_options(options, escape) if options
  content     = ERB::Util.unwrapped_html_escape(content) if escape
  "<#name#tag_options>#PRE_CONTENT_STRINGS[name]#content</#name>".html_safe
end

如您所见,它既是用 Erb 的一些实用程序转义的 html,又是用 html_safe 转义的,最后返回。

【讨论】:

以上是关于何时(何时不)运行 `sanitize` 方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 NextJS s-s-r 流程中何时以及如何调用 React 生命周期方法?

PreApplicationStartMethod 何时真正被触发运行?

HttpModule Init 方法何时在 ASP.NET 集成模式下运行?

查找对象何时在雪花中掉落

何时在方法内创建传入的参数的副本,何时不?

Laravel 4 - 何时使用服务提供者?