2012-03-29 11 views
6

sanitize()ApplicationHelper टैग बंद नहीं करता है।एचटीएमएल को स्वच्छ करें और अपूर्ण टैग बंद करें

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

उपरोक्त स्निपेट स्ट्रिंग को छोड़ देता है। मैं इसे </a> को बंद करने के लिए मजबूर कैसे कर सकता हूं या कम से कम <a> को पूरी तरह से स्ट्रिप कर सकता हूं?

उत्तर

2

अद्यतन जवाब

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

अपनी आखिरी पंक्ति ने मेरे लिए बहुत अच्छा काम किया, और अनजान टैग भी बंद कर दिया। –

5

आप ऐसा करने के लिए एक उचित HTML पार्सर का उपयोग कर सकते हैं। मैं नौकरी के लिए नोकोगिरी की सिफारिश करता हूं:

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>" 

यह हमेशा वैध एक्सएमएल वापस करेगा। बेशक आप आसानी से उपयोग के लिए अपने स्वयं के सहायक विधि में पैकेज कर सकते हैं।

संबंधित मुद्दे