如何在Ruby中编码/解码HTML实体?

时间:2009-10-21 12:36:33

标签: html ruby

我正在尝试解码某些HTML实体,例如'&amp;lt;'成为'<'

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

有什么建议吗?我需要在模型中使用它。

7 个答案:

答案 0 :(得分:278)

要对字符进行编码,您可以使用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>' %>

答案 1 :(得分:144)

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

答案 2 :(得分:35)

要解码Rails中的字符:

<%= raw '<html>' %>

所以,

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

会输出

<br>

答案 3 :(得分:35)

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

样品:

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

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

答案 4 :(得分:8)

如果您不想仅为了执行此操作而添加新的依赖项(例如HTMLEntities)并且您已经在使用Hpricot,那么它可以为您逃脱和转移。它处理的内容远远超过CGI

Hpricot.uxs "foo&nbsp;b&auml;r"
=> "foo bär"

答案 5 :(得分:0)

您可以使用htmlascii gem:

Htmlascii.convert string

答案 6 :(得分:-5)

<% str="<h1> Test </h1>" %>

result: &lt; h1 &gt; Test &lt; /h1 &gt;

<%= CGI.unescapeHTML(str).html_safe %>