【问题标题】:Why Rubocop do not allow html_safe or raw() Rails为什么 Rubocop 不允许 html_safe 或 raw() Rails
【发布时间】:2020-02-13 17:51:09
【问题描述】:

这是我没有通过 Rubocop 的代码,因为:

Rails/OutputSafety:将字符串标记为 html 安全可能存在安全风险。

def number_with_html_delimiter(num)
   number_with_delimiter(num)
      .gsub!(' ', content_tag(:span, "", class: "numbers-delimiter")).html_safe
end

我需要使用一些 css 放置一个自定义跨度以将空格放在 HTML 中,当我删除 html_safe 时它不起作用。

请帮忙,提前谢谢

【问题讨论】:

  • 如果您不介意为所有语言环境使用<span> 分隔符,我建议使用number_with_delimiter(num, delimiter: tag.span(class: 'numbers-delimiter')).html_safe,您目前仅在语言环境使用空间限制器时插入它。即使不是这种情况,您也不希望将 html_safe 更改为 gsub!,因为如果没有替换,gsub! 会返回 nil
  • 谢谢!我使用 number_with_delimiter(num, delimiter: tag.span(class: 'numbers-delimiter')) 并且它有效!

标签: ruby-on-rails ruby rubocop


【解决方案1】:

html_saferaw() 出于安全目的是不安全的。您可以在使用html_safe(或raw)方法的代码之前和之后使用# rubocop:disable Rails/OutputSafety# rubocop:enable Rails/OutputSafetyhtml_safe(或raw)禁用rubocop

# rubocop:disable Rails/OutputSafety
def number_with_html_delimiter(num)
   number_with_delimiter(num)
      .gsub!(' ', content_tag(:span, "", class: "numbers-delimiter")).html_safe
end
#rubocop:enable Rails/OutputSafety

【讨论】:

  • 禁用 rubocop 规则并不能解决问题。
猜你喜欢
  • 2013-04-19
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2014-02-19
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多