Я попытался использовать камень Sanitize
, чтобы очистить строку, содержащую HTML-сайт.
Он удалил теги <script>
, а не JavaScript внутри тегов script.
Что я могу использовать для удаления JavaScript со страницы?
Я попытался использовать камень Sanitize
, чтобы очистить строку, содержащую HTML-сайт.
Он удалил теги <script>
, а не JavaScript внутри тегов script.
Что я могу использовать для удаления 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
Оказывается, что Sanitize
имеет встроенную опцию (просто не документирована)...
Sanitize.clean(content, :remove_contents => ['script', 'style'])
Это удалило все теги script и стиль (и их содержимое), как я хотел.
Я частично отношусь к 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.
Итак, вам нужно добавить камень sanitize
в свой Gemfile:
gem 'sanitize`
Тогда bundle
И тогда вы можете сделать Sanitize.clean(text, remove_contents: ['script', 'style'])
Я использую это регулярное выражение, чтобы избавиться от тегов <script>
и </script>
во встроенном контенте и просто сделать теги пустыми. Он также избавляется от таких вещей, как < script>
или < /script >
... и т.д.... т.е. Добавленные пробелы.
post.content = post.content.gsub(/<\s*script\s*>|<\s*\/\s*script\s*>/, '')