Tách html khỏi chuỗi Ruby on Rails


121

Tôi đang làm việc với Ruby on Rails, Có cách nào để tách htmlkhỏi một chuỗi bằng cách sử dụng sanitize hoặc phương thức bằng và chỉ giữ lại văn bản bên trong thuộc tính value trên thẻ đầu vào không?


Không phải khử trùng hoặc bằng nhưng text.striphoạt động
Keon

Câu trả lời:



183

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"


31
Điều này hoạt động nhưng đề cập đến ActionView từ mdoel là một điều khó xử. Sạch sẽ hơn, bạn có thể làm require 'html/sanitizer'sạch bằng dung dịch vệ sinh của riêng mình HTML::FullSanitizer.new.
Nik Haldimann

8
@nhaldimann, require 'html/sanitizer'phát sinh lỗi nên phải dùng: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Đàm


24
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 , brp và các thuộc tính srcstyle .


9

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.

Loofah Gem

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

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

Cũng có Rails::Html::FullSanitizer.newnếu bạn không muốn chỉ định một danh sách trắng.
Fredrik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.