从HTML页面中删除所有JavaScript

时间:2011-11-28 05:18:24

标签: ruby-on-rails ruby ruby-on-rails-3.1 screen-scraping nokogiri

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

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

我可以使用哪些内容从页面中删除JavaScript?

6 个答案:

答案 0 :(得分:13)

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 :(得分:6)

事实证明Sanitize内置了一个选项(只是没有详细记录)......

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

这删除了我想要的所有脚本和样式标记(及其内容)。

答案 2 :(得分:5)

我偏爱Loofah宝石。从文档中的示例修改:

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

您可能对ActiveRecord extensions Loofah提供的内容感兴趣。

答案 3 :(得分:1)

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

gem 'sanitize`

然后bundle

然后你可以Sanitize.clean(text, remove_contents: ['script', 'style'])

答案 4 :(得分:1)

删除所有脚本标签

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

source

答案 5 :(得分:0)

我使用这个正则表达式来删除嵌入内容中的<script></script>标记,只是让标记消失。它也摆脱了诸如< script>< /script >等等......即添加了空格。

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