Sto cercando di decodificare alcune entità HTML, come '<'
diventare '<'
.
Ho una vecchia gemma ( html_helpers ) ma sembra essere stata abbandonata due volte.
Qualche consiglio? Dovrò usarlo in un modello.
Sto cercando di decodificare alcune entità HTML, come '&lt;'
diventare '<'
.
Ho una vecchia gemma ( html_helpers ) ma sembra essere stata abbandonata due volte.
Qualche consiglio? Dovrò usarlo in un modello.
Risposte:
HTMLEntities può farlo:
: 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
gemma si occupa di casi come å
e —
che CGI.unescapeHTML
non lo fanno.
Per codificare i caratteri, puoi usare CGI.escapeHTML
:
string = CGI.escapeHTML('test "escaping" <characters>')
Per decodificarli, c'è CGI.unescapeHTML
:
CGI.unescapeHTML("test "unescaping" <characters>")
Naturalmente, prima di ciò è necessario includere la libreria CGI:
require 'cgi'
E se sei in Rails, non devi usare CGI per codificare la stringa. C'è il h
metodo
<%= h 'escaping <html>' %>
Penso che anche la gemma di Nokogiri sia una buona scelta. È molto stabile e ha una grande comunità che contribuisce.
Campioni:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
o
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTML
forse non è in grado di risolvere alcuni casi. D'altra parte, se hai bisogno di un set completo di supporto, sono sicuro che Nokogiri
sia una buona scelta.
CGI::escapeHTML
non sfugge ai personaggi tedeschi come äöüß, e forse di più ... Con Nokogiri non ho ancora controllato, ma questo sarebbe un punto in più.
Per decodificare i caratteri in Rails usare:
<%= raw '<html>' %>
Così,
<%= raw '<br>' %>
sarebbe uscita
<br>
#raw
non decodifica nulla. Indica alla vista di non codificare la stringa. Lo fa avvolgendo la stringa in a ActiveSupport::SafeBuffer
, che a sua volta ha un flag ( html_safe?
), impostato su true. La vista utilizza questo flag per determinare che la stringa può essere iniettata direttamente nell'HTML senza essere salvata. Mi piace pensare html_safe
al programmatore come un'indicazione che la stringa in questione è già stata correttamente salvata.
Se non vuoi aggiungere una nuova dipendenza solo per fare questo (come HTMLEntities
) e stai già usando Hpricot
, può sia scappare che scappare per te. Gestisce molto di più di CGI
:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>