我试图解码一些HTML实体,如'&lt;'成为'<'。

我有一个旧的宝石(html_helpers),但它似乎已经被抛弃了两次。

你有什么推荐吗?我需要在模型中使用它。


当前回答

HTMLEntities可以做到:

: 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!"

其他回答

你可以使用htmlascii gem:

Htmlascii.convert string

要编码字符,你可以使用CGI.escapeHTML:

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

要解码它们,有CGI.unescapeHTML:

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

当然,在此之前,你需要包括CGI库:

require 'cgi'

如果你在Rails中,你不需要使用CGI来编码字符串。这是h方法。

<%= h 'escaping <html>' %>

在Rails中,我们可以使用: ERB::Util.html_escape和ERB::Util.url_encode。 在视图中,它们别名为h和u

http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB/Util.html

在Rails中解码字符使用:

<%= raw '<html>' %>

So,

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

将输出

<br>

我认为Nokogiri宝石也是一个不错的选择。它非常稳定,有一个巨大的贡献社区。

样品:

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

or

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