Я пытался использовать гем Sanitize для очистки строки, содержащей HTML-код веб-сайта.
Sanitize
Были удалены только теги <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'])
При этом все теги сценария и стиля (и их содержимое) были удалены, как я хотел.
Я неравнодушен к люфе драгоценному камню.Модифицировано из примера в документации:
1.9.3p0 :005 > Loofah.fragment("<span onclick='foo'>hello</span> <script>alert('OHAI')</script>").scrub!(:prune).to_s => "<span>hello</span> "
Возможно, вас заинтересуют Расширения ActiveRecord Предоставляет Loofah.
html_content = html_content.gsub(/<script.*?>[\s\S]*<\/script>/i, "")
источник
Так что вам нужно добавить драгоценный камень sanitize в ваш Gemfile:
sanitize
gem 'sanitize`
Затем bundle
bundle
И тогда вы можете сделать Sanitize.clean(text, remove_contents: ['script', 'style'])
Sanitize.clean(text, remove_contents: ['script', 'style'])
Я использую это регулярное выражение, чтобы избавиться от тегов <script> и </script> во встроенном содержимом и просто сделать теги исчезающими.Он также избавляется от таких вещей, как < script> или < /script > ... и т. Д., Т. Е. Добавляется пробел.
</script>
< script>
< /script >
post.content = post.content.gsub(/<\s*script\s*>|<\s*\/\s*script\s*>/, '')