我试图解码一些HTML实体,如'<'成为'<'。
我有一个旧的宝石(html_helpers),但它似乎已经被抛弃了两次。
你有什么推荐吗?我需要在模型中使用它。
我试图解码一些HTML实体,如'<'成为'<'。
我有一个旧的宝石(html_helpers),但它似乎已经被抛弃了两次。
你有什么推荐吗?我需要在模型中使用它。
当前回答
要编码字符,你可以使用CGI.escapeHTML:
string = CGI.escapeHTML('test "escaping" <characters>')
要解码它们,有CGI.unescapeHTML:
CGI.unescapeHTML("test "unescaping" <characters>")
当然,在此之前,你需要包括CGI库:
require 'cgi'
如果你在Rails中,你不需要使用CGI来编码字符串。这是h方法。
<%= h 'escaping <html>' %>
其他回答
我认为Nokogiri宝石也是一个不错的选择。它非常稳定,有一个巨大的贡献社区。
样品:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
or
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
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 "¡I'm highly annoyed with character references!"
=> "¡I'm highly annoyed with character references!"
如果你不想添加一个新的依赖项(比如HTMLEntities),并且你已经在使用Hpricot,它可以为你进行转义和反转义。它处理的比CGI多得多:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>
在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