我正尝试解码一些 HTML 实体,如'&amp;lt;'变得'<'.

我有旧的 gem (html_helpers),但似乎已两次放弃。

任何建议?我将需要在模型中使用它。

2009-10-21 12:36:33
问题评论:

刚刚发现 htmlentities (htmlentities.rubyforge.org)

我从多个不同的站点获取 html,并需要将其保存为数据库中的纯文本应指定

回答:

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

Zdrasti Ivailo。感谢您的评论;解决我的问题通过在如何呈现在 Ruby 中的 XML 字符实体引用?也 !

Yup, HTMLEntities gem 处理&aring;&mdash; CGI.unescapeHTML不等的情况。

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

我第一次尝试这种方法,但它不会再像实体"& nbsp;"到""。我猜我应该指定我从多个不同的站点获取 html,并需要将其保存为数据库中的纯文本。

如果正在进行存储的 HTML 实体解码以纯文本格式的数据库中,然后期望数据库要做大量的抱怨坏字符。编码的图元进行编码,以使他们能够以纯文本形式传输。解码它们可以,并很有可能,将它们到上层位设置字符,也称为二进制文件。几乎与可能,您最终可能会得到真正将不快应为纯文本数据库的多字节字符。您最好解码之前没有发生更改,编码后因此一切进行标准化,然后将它们存储。

我遇到 HTML 实体的已编码的多次,确实进行了乱七八糟的事情很的多。签出loofah;如果我记得正确为此设计其清理。

我们已经设置了我们的数据库中保存 Unicode,因此,我怀疑它会抱怨根本。和 loofah 是不我要查找的我不想摆脱 html 标记-不在此时仍。

CGI.unescapeHTML,谢谢 !

要解码字符在 Rails 中的使用︰

<%= raw '<html>' %>

因此,

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

将输出

<br>

这仅适用于该视图通过。我需要事情 ActiveRecord 中也适用。

只是在调试器中的原始测试 & lt br & gt' = = > & lt br & gt'。

这适用于&deg;这是我要做。Tnx。

#raw不会对任何内容进行解码。它通知视图进行编码的字符串。这是通过在ActiveSupport::SafeBuffer,又有一个标志,标志中包装字符串 (html_safe?),则设置为 true。视图使用此标志来确定字符串可以直接插入 HTML 注入未经过转义。我喜欢想象html_safe为指示由程序员问题中的字符串已有已正确转义。

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

Nokogiri 可以解码的 HTML 实体,而是此任务相当重量级的工具。我建议您改为使用CGI.escapeHTML

@theTinMan,是的我认为这取决于该要求。您可以看到通过在本主题中, CGI.escapeHTML可能无法解决某些情况下讨论。在另一只手上,如果您需要一套完整的支持,我相信Nokogiri是个不错的选择。

如果您不想添加新的依赖项,只是为了执行此操作 (如HTMLEntities),并且您已经使用了Hpricot,它可以同时转义并为您恢复原义。它不仅仅CGI处理:

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

不再保留看此现在-Hpricot 的人的注意。

使用Nokogiri,它是 XML/HTML 解析,而不 Hpricot 的标准。

内容来源于Stack Overflow How do I encode/decode HTML entities in Ruby?
请输入您的翻译

How do I encode/decode HTML entities in Ruby?

确认取消