Estou tentando decodificar algumas entidades HTML, como '&lt;'tornar-se '<'.
Eu tenho uma jóia antiga ( html_helpers ), mas parece ter sido abandonada duas vezes.
Alguma recomendação? Vou precisar usá-lo em um modelo.
Estou tentando decodificar algumas entidades HTML, como '&lt;'tornar-se '<'.
Eu tenho uma jóia antiga ( html_helpers ), mas parece ter sido abandonada duas vezes.
Alguma recomendação? Vou precisar usá-lo em um modelo.
Respostas:
HTMLEntities pode fazer isso:
: 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!"
HTMLEntitiesgema lida com casos como åe —quais CGI.unescapeHTMLnão.
Para codificar os caracteres, você pode usar CGI.escapeHTML:
string = CGI.escapeHTML('test "escaping" <characters>')
Para decodificá-los, existe CGI.unescapeHTML:
CGI.unescapeHTML("test "unescaping" <characters>")
Obviamente, antes disso, você precisa incluir a biblioteca CGI:
require 'cgi'
E se você estiver no Rails, não precisará usar CGI para codificar a string. Existe o hmétodo.
<%= h 'escaping <html>' %>
Eu acho que a jóia Nokogiri também é uma boa escolha. É muito estável e tem uma enorme comunidade contribuinte.
Amostras:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
ou
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTMLtalvez não consiga resolver alguns casos. Por outro lado, se você precisar de um conjunto completo de suporte, tenho certeza de que Nokogirié uma boa escolha.
CGI::escapeHTMLnão escapa caracteres alemães como äöüß, e talvez mais ... Com Nokogiri ainda não verifiquei, mas esse seria um ponto positivo.
Para decodificar caracteres no Rails, use:
<%= raw '<html>' %>
Assim,
<%= raw '<br>' %>
produziria
<br>
#rawnão decodifica nada. Diz à exibição para não codificar a sequência. Isso é feito envolvendo a string em a ActiveSupport::SafeBuffer, que por sua vez possui uma flag ( html_safe?), definida como true. A visualização usa esse sinalizador para determinar que a cadeia pode ser injetada diretamente no HTML sem ser escapada. Eu gosto de pensar html_safecomo uma indicação do programador de que a string em questão já foi escapada corretamente.
Se você não deseja adicionar uma nova dependência apenas para fazer isso (como HTMLEntities) e já está usando Hpricot, ela pode escapar e não escapar para você. Ele lida com muito mais do que CGI:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>