Ben gibi bazı HTML öğelerini, çözmeye çalışıyorum '&lt;'olma '<'.
Eski bir mücevher ( html_helpers ) var ama iki kez terk edilmiş gibi görünüyor.
Herhangi bir tavsiye? Bir modelde kullanmam gerekecek.
Ben gibi bazı HTML öğelerini, çözmeye çalışıyorum '&lt;'olma '<'.
Eski bir mücevher ( html_helpers ) var ama iki kez terk edilmiş gibi görünüyor.
Herhangi bir tavsiye? Bir modelde kullanmam gerekecek.
Yanıtlar:
HTMLEntities bunu yapabilir:
: 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!"
HTMLEntitiesmücevher gibi durumlarda ilgilenir åve —hangi CGI.unescapeHTMLbuna gerek yoktur.
Karakterleri kodlamak için şunları kullanabilirsiniz CGI.escapeHTML:
string = CGI.escapeHTML('test "escaping" <characters>')
Onları çözmek için CGI.unescapeHTML:
CGI.unescapeHTML("test "unescaping" <characters>")
Elbette, bundan önce CGI kütüphanesini eklemeniz gerekir:
require 'cgi'
Rails'deyseniz, dizeyi kodlamak için CGI kullanmanıza gerek yoktur. Orada hyöntemi.
<%= h 'escaping <html>' %>
Nokogiri mücevher de iyi bir seçim olduğunu düşünüyorum . Çok kararlı ve büyük bir katkıda bulunan topluluğa sahip.
Örnekler:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
veya
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTMLbelki bazı vakaları çözemeyiz. Öte yandan, tam bir desteğe ihtiyacınız varsa, eminim Nokogiriiyi bir seçimdir.
CGI::escapeHTMLäöüß gibi Almanca karakterlerden kaçmaz ve belki daha fazlası ... Nokogiri ile henüz kontrol etmedim, ama bu artı bir nokta olurdu.
Rails'teki karakterlerin kodunu çözmek için şunu kullanın:
<%= raw '<html>' %>
Yani,
<%= raw '<br>' %>
çıktı
<br>
#rawhiçbir şeyin kodunu çözmez. Bu görünümü söyler değil dize kodlamak için. Bunu, dizeyi true olarak ayarlanmış ActiveSupport::SafeBufferbir flag ( html_safe?) içeren a'ya sararak yapar . Görünüm, dizeden kaçmadan doğrudan HTML'ye enjekte edilebileceğini belirlemek için bu bayrağı kullanır. html_safeProgramcı tarafından söz konusu dizenin zaten düzgün bir şekilde kaçıldığını gösteren bir gösterge olarak düşünmeyi seviyorum .
Sadece bunu yapmak için yeni bir bağımlılık eklemek istemiyorsanız (gibi HTMLEntities) ve zaten kullanıyorsanız Hpricot, sizin için hem kaçabilir hem de manzarayı kaldırabilir. Şunlardan çok daha fazlasını yapar CGI:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>