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

oipij1gg  于 2023-01-04  发布在  Ruby
关注(0)|答案(8)|浏览(132)

我正在尝试解码一些HTML实体,例如'&amp;lt;'变成'<'
我有一个旧宝石(html_helpers),但它似乎已经被遗弃了两次。
有什么建议吗?我需要在模型中使用它。

j91ykkif

j91ykkif1#

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

bnlyeluc2#

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

gxwragnw3#

我认为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!"
klh5stk1

klh5stk14#

要在Rails中解码字符,请使用:

<%= raw '<html>' %>

所以,

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

将输出

<br>
jgovgodb

jgovgodb5#

如果你不想为此添加一个新的依赖项(比如HTMLEntities),并且你已经在使用Hpricot,它可以为你进行转义和反转义,它处理的远不止CGI

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

mzaanser6#

您可以使用htmlascii gem:

Htmlascii.convert string
z9ju0rcb

z9ju0rcb7#

在Rails中我们可以使用:ERB::Util.html_escapeERB::Util.url_encode
在视图中,它们的别名为hu
http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB/Util.html

gojuced7

gojuced78#

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

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

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

相关问题