स्ट्रैप रूबी से html को रेल्स पर स्ट्रिप करें


121

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


पवित्र या समान नहीं है लेकिन text.stripकाम करता है
कीन

जवाबों:


138

इसमें एक strip_tagsविधि है ActionView::Helpers::SanitizeHelper:

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

संपादित करें: मान विशेषता के अंदर पाठ प्राप्त करने के लिए, आप स्ट्रिंग से बाहर निकलने के लिए एक Xpath अभिव्यक्ति के साथ Nokogiri जैसी किसी चीज़ का उपयोग कर सकते हैं।


183

अगर हम इसका उपयोग मॉडल में करना चाहते हैं

ActionView::Base.full_sanitizer.sanitize(html_string)

जो "strip_tags" विधि में कोड है


31
यह काम करता है लेकिन मडेल से ActionView का जिक्र अजीब है। अधिक सफाई से आप require 'html/sanitizer'अपने स्वयं के सैनिटाइजर के साथ कर सकते हैं और तुरंत कर सकते हैं HTML::FullSanitizer.new
निक हल्दीमान

8
@nhaldimann, require 'html/sanitizer'त्रुटि उठाता है , इसलिए मुझे इसका उपयोग करना होगा: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Dam


24
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 और शैली की अनुमति देता है


9

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

लूफै़ण मणि

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

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

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यदि आप एक श्वेतसूची निर्दिष्ट नहीं करना चाहते हैं तो भी है ।
फ्रेड्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.