web-dev-qa-db-ja.com

RubyでHTMLエンティティをエンコード/デコードするにはどうすればよいですか?

'&amp;lt;''<'になるなど、いくつかのHTMLエンティティをデコードしようとしています。

古いgem( html_helpers )がありますが、2回放棄されたようです。

推奨事項はありますか?モデルで使用する必要があります。

189
Kostas

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!"
145
Ivailo Bardarov

文字をエンコードするには、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>' %>
281
Damien MATHIEU

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!"
37
Hoang Le

Railsの文字をデコードするには、次を使用します。

<%= raw '<html>' %>

そう、

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

出力します

<br>
35
memonk

これを行うためだけに新しい依存関係を追加したくない場合(HTMLEntitiesなど)、既にHpricotを使用している場合、エスケープとエスケープ解除の両方が可能です。 CGIをはるかに超えて処理します。

Hpricot.uxs "foo&nbsp;b&auml;r"
=> "foo bär"
8
Jason L Perry

htmlascii gemを使用できます。

Htmlascii.convert string
0
kartouch