如何在Rails中删除某些标签及其内容?
我尝试了sanitize
和strip_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>
答案 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。