2011-09-14 21 views
92

मैं रूबी पर रूबी के साथ काम कर रहा हूं, क्या sanitize या बराबर विधि का उपयोग करके स्ट्रिंग से html स्ट्रिप करने का कोई तरीका है और केवल इनपुट टैग पर मूल्य विशेषता के अंदर टेक्स्ट रखें?स्ट्रिंग से स्ट्रिप एचटीएमएल रेल पर रूबी

+0

स्वच्छ नहीं या बराबर लेकिन 'text.strip' काम करता है – Keon

उत्तर

122

वहाँ ActionView::Helpers::SanitizeHelper में एक strip_tags विधि है:

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

संपादित करें: मूल्य विशेषता के अंदर का पाठ प्राप्त करने के लिए, आप Nokogiri की तरह कुछ एक xpath एक्सप्रेशन के साथ पाने के लिए है कि स्ट्रिंग से बाहर इस्तेमाल कर सकते हैं।

142

हम मॉडल

ActionView::Base.full_sanitizer.sanitize(html_string) 

जो "strip_tags" विधि में कोड है में इस उपयोग करना चाहते हैं

+27

यह लेकिन mdoel से ActionView की चर्चा करते हुए काम करता है अजीब है। अधिक स्पष्ट रूप से आप 'html' sanitizer 'की आवश्यकता हो सकती है और' HTML :: FullSanitizer.new' के साथ अपने स्वयं के sanitizer को तत्काल कर सकते हैं। –

+6

@nhaldimann, 'एचटीएमएल/sanitizer' की आवश्यकता है 'त्रुटि बढ़ाना है, इसलिए मुझे उपयोग करना होगा:' रेल :: एचटीएमएल :: FullSanitizer.new' (http://edgeapi.rubyonrails.org/classes/HTML/FullSanitizer.html# विधि-i-sanitize) –

19

हाँ, यह कहते हैं: sanitize(html_string, :tags=>[])

8
ActionView::Base.full_sanitizer.sanitize(html_string) 

टैग की व्हाइट सूची और गुणों को

ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style)) 
के रूप में निर्दिष्ट किया जा सकता है

उपरोक्त कथन टैग की अनुमति देता है: img, br और p और विशेषताएँ: src और style।

2

इस बारे में कैसे?

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 
+0

यदि आप श्वेतसूची निर्दिष्ट नहीं करना चाहते हैं तो 'रेल :: एचटीएमएल :: FullSanitizer.new' भी है। – Fredrik

1

मैं लूफै़ण पुस्तकालय का उपयोग किया है, के रूप में यह दोनों HTML और XML (दोनों दस्तावेजों और स्ट्रिंग टुकड़े) के लिए उपयुक्त है। यह एचटीएमएल sanitizer मणि के पीछे इंजन है। मैं बस उदाहरण के उदाहरण को पेस्ट कर रहा हूं यह दिखाने के लिए कि इसका उपयोग करना कितना आसान है।

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 " 
संबंधित मुद्दे