web-dev-qa-db-fra.com

Comment encoder / décoder des entités HTML en Ruby?

J'essaie de décoder certaines entités HTML, telles que '&amp;lt;' devenir '<'.

J'ai un vieux bijou ( html_helpers ) mais il semble avoir été abandonné deux fois.

Des recommandations? J'aurai besoin de l'utiliser dans un modèle.

189
Kostas

HTMLEntities peut le faire:

: 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 "&iexcl;I&#39;m highly&nbsp;annoyed with character references!"
=> "¡I'm highly annoyed with character references!"
145
Ivailo Bardarov

Pour encoder les caractères, vous pouvez utiliser CGI.escapeHTML:

string = CGI.escapeHTML('test "escaping" <characters>')

Pour les décoder, il y a CGI.unescapeHTML:

CGI.unescapeHTML("test &quot;unescaping&quot; &lt;characters&gt;")

Bien entendu, avant cela, vous devez inclure la bibliothèque CGI:

require 'cgi'

Et si vous êtes dans Rails, vous n'avez pas besoin d'utiliser CGI pour encoder la chaîne. Il y a la méthode h.

<%= h 'escaping <html>' %>
281
Damien MATHIEU

Je pense que Nokogiri gem est également un bon choix. Il est très stable et a une énorme communauté contributive.

Échantillons:

a = Nokogiri::HTML.parse "foo&nbsp;b&auml;r"    
a.text 
=> "foo bär"

ou

a = Nokogiri::HTML.parse "&iexcl;I&#39;m highly&nbsp;annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
37
Hoang Le

Pour décoder les caractères dans Rails, utilisez:

<%= raw '<html>' %>

Alors,

<%= raw '&lt;br&gt;' %>

serait sortie

<br>
35
memonk

Si vous ne voulez pas ajouter une nouvelle dépendance simplement pour faire ceci (comme HTMLEntities) et que vous utilisez déjà Hpricot, elle peut à la fois s'échapper et vous échapper. Il gère beaucoup plus que CGI:

Hpricot.uxs "foo&nbsp;b&auml;r"
=> "foo bär"
8
Jason L Perry

Vous pouvez utiliser htmlascii gem:

Htmlascii.convert string
0
kartouch