मैं कुछ HTML संस्थाओं को डीकोड करने की कोशिश कर रहा हूं, जैसे कि '&lt;'बनना '<'।
मेरे पास एक पुराना रत्न है ( html_helpers ) लेकिन ऐसा लगता है कि दो बार छोड़ दिया गया है।
कोई सिफारिशें? मुझे इसे एक मॉडल में उपयोग करने की आवश्यकता होगी।
मैं कुछ HTML संस्थाओं को डीकोड करने की कोशिश कर रहा हूं, जैसे कि '&lt;'बनना '<'।
मेरे पास एक पुराना रत्न है ( html_helpers ) लेकिन ऐसा लगता है कि दो बार छोड़ दिया गया है।
कोई सिफारिशें? मुझे इसे एक मॉडल में उपयोग करने की आवश्यकता होगी।
जवाबों:
HTMLEntities यह कर सकते हैं:
: jmglov@laurana; sudo gem install htmlentities
Successfully installed htmlentities-4.2.4
: jmglov@laurana; irb
irb(main):001:0> require 'htmlentities'
=> []
irb(main):002:0> HTMLEntities.new.decode "¡I'm highly annoyed with character references!"
=> "¡I'm highly annoyed with character references!"
HTMLEntitiesमणि जैसे मामलों से संबंधित है åऔर —जो CGI.unescapeHTMLनहीं करता है।
वर्णों को एनकोड करने के लिए, आप उपयोग कर सकते हैं CGI.escapeHTML:
string = CGI.escapeHTML('test "escaping" <characters>')
उन्हें डिकोड करने के लिए, वहाँ है CGI.unescapeHTML:
CGI.unescapeHTML("test "unescaping" <characters>")
बेशक, इससे पहले कि आप CGI पुस्तकालय को शामिल करने की जरूरत है:
require 'cgi'
और यदि आप रेल में हैं, तो आपको स्ट्रिंग को एनकोड करने के लिए CGI का उपयोग करने की आवश्यकता नहीं है। वहाँ hविधि है।
<%= h 'escaping <html>' %>
मुझे लगता है कि नोकगिरी रत्न भी एक अच्छा विकल्प है। यह बहुत स्थिर है और इसमें बहुत बड़ा योगदान समुदाय है।
नमूने:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
या
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTMLशायद कुछ मामलों को हल करने में असमर्थ हैं। दूसरी ओर, यदि आपको पूर्ण समर्थन की आवश्यकता है, तो मुझे यकीन है कि Nokogiriएक अच्छा विकल्प है।
CGI::escapeHTMLजर्मन पात्रों जैसे äöß doesn't, और शायद अधिक से बच नहीं है ... Nokogiri के साथ मैंने अभी तक जाँच नहीं की है, लेकिन यह एक प्लस बिंदु होगा।
रेल के उपयोग में पात्रों को डिकोड करने के लिए:
<%= raw '<html>' %>
इसलिए,
<%= raw '<br>' %>
उत्पादन होगा
<br>
#rawकुछ भी डिकोड नहीं करता है। यह स्ट्रिंग को एनकोड करने का दृश्य नहीं बताता है । यह स्ट्रिंग को एक में लपेटकर ऐसा करता है ActiveSupport::SafeBuffer, जिसमें बदले में एक झंडा होता है ( html_safe?), सही पर सेट। दृश्य इस ध्वज का उपयोग यह निर्धारित करने के लिए करता है कि स्ट्रिंग को बिना HTML में सीधे इंजेक्ट किया जा सकता है बिना बच जाए। मैं html_safeप्रोग्रामर द्वारा एक संकेत के रूप में सोचना पसंद करता हूं कि प्रश्न में स्ट्रिंग पहले से ही ठीक से बच गई है।
यदि आप ऐसा करने के लिए सिर्फ एक नई निर्भरता नहीं जोड़ना चाहते हैं (जैसे HTMLEntities) और आप पहले से ही उपयोग कर रहे हैं Hpricot, तो यह आपके लिए बच और अनस्केप कर सकता है। यह बहुत अधिक से अधिक संभालती है CGI:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>