删除Rails中的标签及其内容

时间:2016-09-28 11:35:02

标签: ruby-on-rails sanitize

如何在Rails中删除某些标签及其内容?

我尝试了sanitizestrip_tags,但他们只删除了代码并保留了内容。

<%= raw sanitize(@content, :tags => ['h1','h2','h3','h4','h5','h6','p','ul','ol','li','small','b','strong','em','i','u']) %>

所以,如果我有这个:

<script>alert('test js');</script>
<p>Hello world</p>

我想成为:

<p>Hello world</p>

目前成为:

alert('test js');
<p>Hello world</p>

1 个答案:

答案 0 :(得分:1)

Sanitize有一个remove_contents选项,您可以使用它。

从测试代码:

Sanitize.fragment('foo bar <div>baz<span>quux</span></div>',
  :remove_contents => true
)
#=> 'foo bar   '

请参阅test example

对于上面的情况,您可以在remove_contents的值中指定要删除的标记,如下所示:

Sanitize.fragment("<script>alert('test js');</script><p>Hello world</p>",
  remove_contents: ["script"]
)
#=> " Hello world "

或者,您可以指定要保留的元素并删除其他所有元素,如下所示:

html = "<strong>foo</strong><div>bar</div>"
Sanitize.fragment(html,
  elements: ['h1','h2','h3','h4','h5','h6','p','ul','ol','li','small','b','strong','em','i','u'],
  remove_contents: true
)
#=> "<strong>foo</strong>  "

如果是你只想删除像<script>这样的标签并保持其他一切不变,你可以这样做:

html = "<strong>foo</strong><script>bar</script><p>baz</p><div>foobar</div>"
Sanitize.fragment(html,
  Sanitize::Config.merge(Sanitize::Config::BASIC, remove_contents: ['script'])
)
#=> "<strong>foo</strong><p>baz</p> foobar "

请注意,上一个<div>的内容仍然存在,因为它未包含在remove_contents数组中,但其<div>标记已被删除(Sanitize::Config::BASIC作品)。将Sanitize::Config::BASIC替换为Sanitize::Config::RELAXED,以获得限制较少的过滤规则,此示例中会留下<div>个标记。

许多其他事情都是可能的,尽管我发现的唯一文件是in the code itself