Spec-Zone.ru › Ruby on Rails 6.0

модуль ActionView::Helpers::SanitizeHelper

Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших шаблонах.

Общедоступные методы экземпляров

sanitize(html, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 81
def sanitize(html, options = {})
  self.class.safe_list_sanitizer.sanitize(html, options)&.html_safe
end

Очищает входные данные HTML, удаляя все, кроме известных безопасных тегов и атрибутов.

Он также удаляет атрибуты href/src с небезопасными протоколами, такими как javascript:, а также защищает от попыток использовать ссылки на символы Unicode, ASCII и шестнадцатеричные, чтобы обойти эти фильтры протоколов. Все специальные символы будут экранированы.

По умолчанию используется очиститель Rails::Html::SafeListSanitizer. Подробнее см. Rails HTML Sanitizers.

Также можно указать пользовательские правила очистки.

Обратите внимание, что очистка пользовательского текста не гарантирует, что полученная разметка будет валидной или даже правильно сформированной.

Параметры

  • :tags — массив разрешённых тегов.

  • :attributes — массив разрешённых атрибутов.

  • :scrubber — объект Rails::Html scrubber или Loofah::Scrubber, определяющий пользовательские правила очистки. Пользовательский очиститель имеет приоритет над пользовательскими тегами и атрибутами.

Примеры

Обычное использование:

<%= sanitize @comment.body %>

Указание пользовательских списков разрешённых тегов и атрибутов:

<%= sanitize @comment.body, tags: %w(strong em a), attributes: %w(href) %>

Указание пользовательского очистителя Rails::Html:

class CommentScrubber < Rails::Html::PermitScrubber
  def initialize
    super
    self.tags = %w( form script comment blockquote )
    self.attributes = %w( style )
  end

  def skip_node?(node)
    node.text?
  end
end

<%= sanitize @comment.body, scrubber: CommentScrubber.new %>

См. Rails HTML Sanitizer для документации о Rails::Html очистителях.

Указание пользовательского Loofah::Scrubber:

scrubber = Loofah::Scrubber.new do |node|
  node.remove if node.name == 'script'
end

<%= sanitize @comment.body, scrubber: scrubber %>

См. документацию Loofah для получения дополнительной информации о определении пользовательских объектов Loofah::Scrubber.

Для установки по умолчанию разрешённых тегов или атрибутов в вашем приложении:

# In config/application.rb
config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a']
config.action_view.sanitized_allowed_attributes = ['href', 'title']
sanitize_css(style) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 86
def sanitize_css(style)
  self.class.safe_list_sanitizer.sanitize_css(style)
end

Очищает блок кода CSS. Используется sanitize при столкновении с атрибутом стиля.

strip_links(html) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 120
def strip_links(html)
  self.class.link_sanitizer.sanitize(html)
end

Удаляет все теги ссылок из html, оставляя только текст ссылки.

strip_links('<a href="http://www.rubyonrails.org">Ruby on Rails</a>')
# => Ruby on Rails

strip_links('Please e-mail me at <a href="mailto:me@email.com">me@email.com</a>.')
# => Please e-mail me at me@email.com.

strip_links('Blog: <a href="http://www.myblog.com/" class="nav" target=\"_blank\">Visit</a>.')
# => Blog: Visit.

strip_links('<<a href="https://example.org">malformed & link</a>')
# => &lt;malformed &amp; link
strip_tags(html) Показать исходный код
# File actionview/lib/action_view/helpers/sanitize_helper.rb, line 103
def strip_tags(html)
  self.class.full_sanitizer.sanitize(html)
end

Удаляет все HTML-теги из html, включая комментарии и специальные символы.

strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!

strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more here</a>...")
# => Bold no more!  See more here...

strip_tags("<div id='top-bar'>Welcome to my website!</div>")
# => Welcome to my website!

strip_tags("> A quote from Smith & Wesson")
# => &gt; A quote from Smith &amp; Wesson

© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API