Rails 4清理从元素中删除样式属性

时间:2015-12-18 13:02:31

标签: ruby-on-rails rubygems sanitize

我使用sanitize gem来清理输入。 现在我需要允许添加样式到span。实际上我只想允许特定的样式(font-stylefont-weighttext-decoration),但目前我甚至无法设法允许样式属性。

我使用以下配置:

class Sanitize
  module Config
    ANSWER = freeze_config(
      :elements => RESTRICTED[:elements] + %w[
        iframe img a br code li ol ul p pre small strike sub sup span style
      ],

      :attributes => {
        'a'      => %w[href],
        'img'    => %w[src],
        'iframe' => %w[allowfullscreen frameborder height src width],
        'span'   => %w[style],
        'style'  => %w[font-style font-weight text-decoration],      
      },

      :add_attributes => {
        'a'       => {'rel' => 'nofollow', 'target' => '_blank'},
        'iframe'  => {'frameborder' => '0'},
      },

      :protocols => {
        'a'      => {'href' => ['http', 'https', 'mailto', :relative]},
        'img'    => {'src'  => ['http', 'https']},
        'iframe' => {'src'  => ['http', 'https', :relative]}
      },

      :at_rules_with_styles => %w[
        font-style font-weight text-decoration
      ],
    )
  end
end

但是当我尝试这个时:

sanitize_settings = Sanitize::Config::ANSWER
Sanitize.fragment('<span style="color:red">rr</span>', sanitize_settings)

我明白了:

 => "<span>rr</span>"

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

下面的代码应该基于最新版本。

jsdom

Sanitize :: Config :: RELAXED [:css] [:properties]包含所有样式属性。如果只想要允许颜色属性,请指定:

Sanitize.fragment('<span style="color:red">rr</span>',
   :elements => %w[div span],
   :atributes => {:all => ['style'],
   :css => {properties: Sanitize::Config::RELAXED[:css][:properties]}
  )

答案 1 :(得分:0)

我不使用sanitize gem,但我认为问题在于attributes内部style没有正确的值。

试试这个:

'style'  => %w[font-style font-weight text-decoration color]

答案 2 :(得分:0)

我无法修复清理过滤器,我所做的就是使用html标签(<b><i><u>)。

对于那些使用summernote html编辑器遇到此问题的人,解决方法是将编辑器设置为:

$('.summernote').summernote({
       :
       :
  styleWithSpan: false
});