Удалить весь JavaScript с HTML-страницы - PullRequest
11 голосов
/ 28 ноября 2011

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

Были удалены только теги <script>, а не JavaScript внутри тегов скрипта.

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

Ответы [ 6 ]

13 голосов
/ 28 ноября 2011
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
6 голосов
/ 29 ноября 2011

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

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

При этом все теги сценария и стиля (и их содержимое) были удалены, как я хотел.

5 голосов
/ 28 ноября 2011

Я неравнодушен к люфе драгоценному камню.Модифицировано из примера в документации:

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

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

1 голос
/ 23 июля 2018

удалить все теги скрипта

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

источник

1 голос
/ 20 августа 2014

Так что вам нужно добавить драгоценный камень sanitize в ваш Gemfile:

gem 'sanitize`

Затем bundle

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

0 голосов
/ 29 мая 2016

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

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

...