2012-03-29 40 views
6

sanitize() trong ApplicationHelper không đóng thẻ.Vệ sinh HTML và đóng các thẻ chưa hoàn thành

s = "<a href='http://example.com'>incomplete" 
sanitize(s, :tags => ['a', 'p']) 

Đoạn mã trên để nguyên chuỗi như vậy. Làm thế nào tôi có thể buộc nó để đóng một </a> đóng hoặc ít nhất là dải <a> hoàn toàn?

Trả lời

2

Câu trả lời được cập nhật là

html = "<a href='http://example.com'>incomplete" 
html = sanitize(s, tags: %w[a p]) 
Nokogiri::HTML::DocumentFragment.parse(html).to_html 
+0

Dòng cuối cùng của chính nó đã làm việc tuyệt vời cho tôi và đóng các thẻ không được đính kèm. –

5

Bạn có thể sử dụng trình phân tích cú pháp HTML thích hợp để thực hiện việc này. Tôi muốn giới thiệu Nokogiri cho công việc:

require 'nokogiri' 
# ... 
s = "<a href='http://example.com'>incomplete" 
Nokogiri::HTML::fragment(sanitize(s, :tags => ['a', 'p'])).to_xml 
# => "<a href=\"http://example.com\">incomplete</a>" 

Điều này sẽ luôn trả về XML hợp lệ. Tất nhiên bạn có thể gói nó vào phương thức trợ giúp của riêng bạn để sử dụng dễ dàng hơn.

Các vấn đề liên quan