Estou tentando decodificar algumas entidades HTML, como '<'
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:
fonte
HTMLEntities
gema lida com casos comoå
e—
quaisCGI.unescapeHTML
não.Para codificar os caracteres, você pode usar
CGI.escapeHTML
:Para decodificá-los, existe
CGI.unescapeHTML
:Obviamente, antes disso, você precisa incluir a biblioteca CGI:
E se você estiver no Rails, não precisará usar CGI para codificar a string. Existe o
h
método.fonte
Eu acho que a jóia Nokogiri também é uma boa escolha. É muito estável e tem uma enorme comunidade contribuinte.
Amostras:
ou
fonte
CGI.escapeHTML
talvez não consiga resolver alguns casos. Por outro lado, se você precisar de um conjunto completo de suporte, tenho certeza de queNokogiri
é uma boa escolha.CGI::escapeHTML
nã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:
Assim,
produziria
fonte
#raw
não decodifica nada. Diz à exibição para não codificar a sequência. Isso é feito envolvendo a string em aActiveSupport::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 pensarhtml_safe
como 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á usandoHpricot
, ela pode escapar e não escapar para você. Ele lida com muito mais do queCGI
:fonte
Você pode usar
htmlascii
gema:fonte
fonte