我尝试使用Sanitize
gem来清理包含网站HTML的字符串。
它只删除了<script>
标记,而不是脚本标记内的JavaScript。
我可以使用哪些内容从页面中删除JavaScript?
答案 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)
答案 5 :(得分:0)
我使用这个正则表达式来删除嵌入内容中的<script>
和</script>
标记,只是让标记消失。它也摆脱了诸如< script>
或< /script >
等等......即添加了空格。
post.content = post.content.gsub(/<\s*script\s*>|<\s*\/\s*script\s*>/, '')