从HTML页面中删除所有JavaScript



我试过使用Sanitize gem来清理包含网站HTML的字符串。

它只删除了<script>标签,而不是脚本标签内的JavaScript。

我可以用什么从页面中删除JavaScript ?

require 'open-uri'      # included with Ruby; only needed to load HTML from a URL
require 'nokogiri'      # gem install nokogiri   read more at http://nokogiri.org
html = open('http://stackoverflow.com')              # Get the HTML source string
doc = Nokogiri.HTML(html)                            # Parse the document
doc.css('script').remove                             # Remove <script>…</script>
puts doc                                             # Source w/o script blocks
doc.xpath("//@*[starts-with(name(),'on')]").remove   # Remove on____ attributes
puts doc                                             # Source w/o any JavaScript

我偏爱丝瓜宝石。修改自文档中的示例:

1.9.3p0 :005 > Loofah.fragment("<span onclick='foo'>hello</span> <script>alert('OHAI')</script>").scrub!(:prune).to_s
 => "<span>hello</span> " 

您可能对Loofah提供的ActiveRecord扩展感兴趣。

事实证明,Sanitize有一个内置的选项(只是没有很好地记录)…

Sanitize.clean(content, :remove_contents => ['script', 'style'])

这删除了所有的脚本和样式标签(和他们的内容),我想。

所以你需要添加sanitize gem到你的Gemfile:

gem 'sanitize`

Then bundle

然后输入Sanitize.clean(text, remove_contents: ['script', 'style'])

我使用这个正则表达式来消除嵌入内容中的<script></script>标记,只是使标记消失。它还可以摆脱< script>< /script >等东西…即添加空白

post.content = post.content.gsub(/<s*scripts*>|<s*/s*scripts*>/, '')

删除所有脚本标签

html_content = html_content.gsub(/<script.*?>[sS]*</script>/i, "")

删除所有<script>标签及其内容:

regex = /<s*ss*cs*rs*is*ps*t.*?>.*?<s*/s*ss*cs*rs*is*ps*ts*>|<s*ss*cs*rs*is*ps*t.*?>|<s*/s*ss*cs*rs*is*ps*ts*>/im
while text =~ regex
  text.gsub!(regex, '')
end

这甚至可以处理如下情况:

<scr<script></script>ipt>alert('hello');</scr</script>ipt>
<script class='blah'  >alert('hello');</script  >

和其他技巧。但是,它不会删除通过onload=onclick=执行的JavaScript。

相关内容

  • 没有找到相关文章

最新更新