Я работаю с Ruby on Rails, есть способ удалить html
из строки, используя метод sanitize или equal, и сохранить только текст внутри атрибута value на теге ввода?
Strip html из строки Ruby on Rails
Ответ 1
В ActionView::Helpers::SanitizeHelper
есть метод strip_tags
:
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags
Изменить: для получения текста внутри атрибута value вы можете использовать что-то вроде Nokogiri с выражением Xpath, чтобы получить это из строки.
Ответ 2
Если мы хотим использовать это в модели
ActionView::Base.full_sanitizer.sanitize(html_string)
который является кодом в методе "strip_tags"
Ответ 3
Да, назовите это: sanitize(html_string, tags:[])
Ответ 4
ActionView::Base.full_sanitizer.sanitize(html_string)
Белый список тегов и атрибутов может быть указан ниже
ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))
Выше оператор позволяет теги img, br и p и атрибуты src и style.
Ответ 5
Я использовал библиотеку Loofah, так как она подходит как для HTML, так и для XML (как документов, так и фрагментов строк). Это двигатель, стоящий за гемом дезинфицирующего средства html. Я просто вставляю пример кода, чтобы показать, насколько он прост в использовании.
unsafe_html = "ohai! <div>div is safe</div> <script>but script is not</script>"
doc = Loofah.fragment(unsafe_html).scrub!(:strip)
doc.to_s # => "ohai! <div>div is safe</div> "
doc.text # => "ohai! div is safe "
Ответ 6
Как насчет этого?
white_list_sanitizer = Rails::Html::WhiteListSanitizer.new
WHITELIST = ['p','b','h1','h2','h3','h4','h5','h6','li','ul','ol','small','i','u']
[Your, Models, Here].each do |klass|
klass.all.each do |ob|
klass.attribute_names.each do |attrs|
if ob.send(attrs).is_a? String
ob.send("#{attrs}=", white_list_sanitizer.sanitize(ob.send(attrs), tags: WHITELIST, attributes: %w(id style)).gsub(/<p>\s*<\/p>\r\n/im, ''))
ob.save
end
end
end
end