Ben gibi bazı HTML öğelerini, çözmeye çalışıyorum '<'
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!"
HTMLEntities
mücevher gibi durumlarda ilgilenir å
ve —
hangi CGI.unescapeHTML
buna 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 h
yö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.escapeHTML
belki bazı vakaları çözemeyiz. Öte yandan, tam bir desteğe ihtiyacınız varsa, eminim Nokogiri
iyi 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>
#raw
hiçbir şeyin kodunu çözmez. Bu görünümü söyler değil dize kodlamak için. Bunu, dizeyi true olarak ayarlanmış ActiveSupport::SafeBuffer
bir 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_safe
Programcı 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 %>