Pracuję z Ruby on Rails, Czy istnieje sposób na usunięcie html
z ciągu znaków przy użyciu metody dezynfekcji lub równości i zachowanie tylko tekstu wewnątrz atrybutu wartości w tagu wejściowym?Strip html z ciągu Ruby on Rails
Odpowiedz
Jest to metoda strip_tags
w ActionView::Helpers::SanitizeHelper
:
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags
Edit: dla uzyskania tekst wewnątrz atrybutu value, można użyć coś takiego Nokogiri z wyrażeniem XPath, aby ta z łańcucha.
Jeśli chcemy użyć tego w modelu
ActionView::Base.full_sanitizer.sanitize(html_string)
która jest kod w "strip_tags" metoda
To działa, ale nawiązując do actionView z mdoel jest niewygodne. Bardziej czysto można "wymagać" html/sanitizer'' i utworzyć instancję dezynfekującą za pomocą 'HTML :: FullSanitizer.new'. –
@nhaldimann, 'require 'html/sanitizer'' podnosi błąd, więc muszę użyć:' Rails :: Html :: FullSanitizer.new' (http://edgeapi.rubyonrails.org/classes/HTML/FullSanitizer.html# method-i-sanitize) –
Tak, nazywamy to: sanitize(html_string, :tags=>[])
ActionView::Base.full_sanitizer.sanitize(html_string)
Białą listę tagów i atrybuty można określać jako
ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))
Powyższe zestawienie umożliwia stosowanie znaczników: img, br i p oraz atrybutów: src i style.
Co z tym?
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
Istnieje również 'Rails :: Html :: FullSanitizer.new', jeśli nie chcesz określać białej listy. – Fredrik
Użyłem biblioteki Loofah, ponieważ jest ona odpowiednia zarówno dla HTML, jak i XML (zarówno dokumentów, jak i fragmentów napisów). To jest silnik za klejnotem sanitizer html. Po prostu wklejam przykład kodu, aby pokazać, jak prosty jest w użyciu.
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 "
- 1. Odpowiednik HTML dla Ruby on Rails?
- 2. Dodawanie HTML Ruby on Rails wiadomość błysk
- 3. Ruby on Rails on IIS?
- 4. Antypatterns z Ruby on Rails
- 5. Ruby vs. Ruby On Rails
- 6. Docsplit Ruby on Rails
- 7. Przełącznik Ruby on Rails
- 8. Integracja Ruby on Rails z Wordpress
- 9. Problem z połączeniem z Ruby on rails
- 10. Zliczanie długości ciągu w javascript i Ruby on Rails
- 11. Przesyłanie plików HTML5 z Ruby on Rails
- 12. Ruby on rails i Node.js
- 13. Ruby on Rails link_to obrazu
- 14. Ruby on Rails 301 przekierowanie
- 15. Pakiety Ruby on Rails downgrade
- 16. Ruby on Rails: wybierz formularz
- 17. Stowarzyszenie polimorficzne Ruby on Rails
- 18. Ruby on Rails vs. Django
- 19. Ruby on Rails: menu rozwijane
- 20. Ruby on Rails coffeescript braku
- 21. Ruby on Rails I18n interpolation
- 22. RVM Ruby on Rails instalacja
- 23. Konwersja projektu Ruby on Rails do projektu JRuby on Rails
- 24. Ruby on Rails wysyłania SMS
- 25. Ruby on Rails: Wyszukiwanie zaawansowane
- 26. Zwijanie na Ruby on Rails
- 27. Ruby on Rails javascript_include_tag: domyślnie
- 28. Narzędzia raportowania Ruby on Rails?
- 29. Ruby on Rails kontra Python
- 30. Ruby on Rails. Unicode routes
Nie zdezynfekować lub równe, ale 'text.strip' działa – Keon