Próbuję zdekodować niektóre elementy HTML, takie jak '<'
stawanie się '<'
.
Mam stary klejnot ( html_helpers ), ale wydaje się, że został porzucony dwukrotnie.
Jakieś rekomendacje? Będę musiał użyć go w modelu.
Próbuję zdekodować niektóre elementy HTML, takie jak '&lt;'
stawanie się '<'
.
Mam stary klejnot ( html_helpers ), ale wydaje się, że został porzucony dwukrotnie.
Jakieś rekomendacje? Będę musiał użyć go w modelu.
Odpowiedzi:
HTMLEntities może to zrobić:
: 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
klejnot zajmuje się przypadkami takimi jak å
i —
które CGI.unescapeHTML
nie.
Aby zakodować znaki, możesz użyć CGI.escapeHTML
:
string = CGI.escapeHTML('test "escaping" <characters>')
Aby je zdekodować, dostępne są CGI.unescapeHTML
:
CGI.unescapeHTML("test "unescaping" <characters>")
Oczywiście wcześniej musisz dołączyć bibliotekę CGI:
require 'cgi'
A jeśli jesteś w Railsach, nie musisz używać CGI do kodowania łańcucha. Jest h
metoda.
<%= h 'escaping <html>' %>
Myślę, że klejnot Nokogiri to również dobry wybór. Jest bardzo stabilny i ma ogromną społeczność.
Próbki:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
lub
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTML
być może nie uda się rozwiązać niektórych spraw. Z drugiej strony, jeśli potrzebujesz pełnego zestawu wsparcia, jestem pewien, że Nokogiri
to dobry wybór.
CGI::escapeHTML
nie ucieka przed niemieckimi postaciami, takimi jak äöüß, a może więcej ... Z Nokogiri jeszcze nie sprawdziłem, ale byłby to plus.
Aby zdekodować znaki w Railsach, użyj:
<%= raw '<html>' %>
Więc,
<%= raw '<br>' %>
wyszedłby
<br>
#raw
niczego nie dekoduje. Mówi widokowi, aby nie kodował łańcucha. Odbywa się to poprzez zawijanie łańcucha w ActiveSupport::SafeBuffer
, który z kolei ma flagę ( html_safe?
), ustawioną na true. Widok używa tej flagi do ustalenia, że ciąg może być wstrzykiwany bezpośrednio do HTML bez ucieczki. Lubię myśleć o html_safe
tym, że programista wskazuje, że omawiany ciąg znaków został już poprawnie zmieniony.
Jeśli nie chcesz dodawać nowej zależności tylko po to, aby to zrobić (np. HTMLEntities
), A już używasz Hpricot
, może ona dla Ciebie zarówno uciec, jak i odinstalować. Obsługuje znacznie więcej niż CGI
:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>