модуль ActionView::Helpers::SanitizeHelper
Модуль SanitizeHelper предоставляет набор методов для очистки текста от нежелательных HTML-элементов. Эти вспомогательные методы расширяют Action View, делая их вызываемыми в ваших шаблонах.
Публичные методы экземпляров
# 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 очистителям см. Rails HTML Sanitizer.
Предоставление пользовательского Loofah::Scrubber:
scrubber = Loofah::Scrubber.new do |node| node.remove if node.name == 'script' end <%= sanitize @comment.body, scrubber: scrubber %>
Для получения дополнительной информации об определении пользовательских объектов Loofah::Scrubber см. документацию Loofah.
Для установки значений по умолчанию для разрешенных тегов или атрибутов во всем приложении:
# In config/application.rb config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a'] config.action_view.sanitized_allowed_attributes = ['href', 'title']
# 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 при встрече атрибута style.
# 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>')
# => <malformed & link
# 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")
# => > A quote from Smith & Wesson
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.