Удалите все JavaScript с HTML-страницы

Я попытался использовать камень Sanitize, чтобы очистить строку, содержащую HTML-сайт.

Он удалил теги <script>, а не JavaScript внутри тегов script.

Что я могу использовать для удаления JavaScript со страницы?

Ответ 1

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

Ответ 2

Оказывается, что Sanitize имеет встроенную опцию (просто не документирована)...

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

Это удалило все теги script и стиль (и их содержимое), как я хотел.

Ответ 3

Я частично отношусь к Loofah gem. Изменен из примера в документах:

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

Возможно, вас заинтересует расширение ActiveRecord, которое предоставляет Loofah.

Ответ 4

Итак, вам нужно добавить камень sanitize в свой Gemfile:

gem 'sanitize`

Тогда bundle

И тогда вы можете сделать Sanitize.clean(text, remove_contents: ['script', 'style'])

Ответ 5

Я использую это регулярное выражение, чтобы избавиться от тегов <script> и </script> во встроенном контенте и просто сделать теги пустыми. Он также избавляется от таких вещей, как < script> или < /script >... и т.д.... т.е. Добавленные пробелы.

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