Câu trả lời:
Có một strip_tags
phương pháp trong ActionView::Helpers::SanitizeHelper
:
http://api.rubyonrails.org/classes/ActionView/Helpers/SanifyingHelper.html#method-i-strip_tags
Chỉnh sửa: để lấy văn bản bên trong thuộc tính giá trị, bạn có thể sử dụng một cái gì đó như Nokogiri với biểu thức Xpath để lấy phần đó ra khỏi chuỗi.
Nếu chúng ta muốn sử dụng điều này trong mô hình
ActionView::Base.full_sanitizer.sanitize(html_string)
đó là mã trong phương thức "dải_tag"
require 'html/sanitizer'
sạch bằng dung dịch vệ sinh của riêng mình HTML::FullSanitizer.new
.
require 'html/sanitizer'
phát sinh lỗi nên phải dùng: Rails::Html::FullSanitizer.new
( edgeapi.rubyonrails.org/classes/HTML/… )
Có, hãy gọi cái này: sanitize(html_string, tags:[])
ActionView::Base.full_sanitizer.sanitize(html_string)
Danh sách trắng các thẻ và thuộc tính có thể được chỉ định như sau
ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))
Câu lệnh trên cho phép các thẻ img , br và p và các thuộc tính src và style .
Tôi đã sử dụng thư viện Loofah, vì nó phù hợp với cả HTML và XML (cả tài liệu và các đoạn chuỗi). Nó là động cơ đằng sau đá quý html sanitizer. Tôi chỉ dán ví dụ mã để cho thấy cách sử dụng đơn giản.
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 "
Còn cái này thì sao?
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
Rails::Html::FullSanitizer.new
nếu bạn không muốn chỉ định một danh sách trắng.
text.strip
hoạt động