Ruby

Ruby で文字実体参照や数値文字参照をデコードする方法

More than 1 year has passed since last update.

何を使って実装するのが妥当なのか。

Oga と htmlentities は String#gsub での置換で実装されている。

一方で Nokogiri はパースしてからテキストノードの値として取得する実装っぽい。

Oga を使っているなら Oga を使い、そうでないなら、htmlentities を入れて使うのが手頃だろうか。


CGI.unescape_html

文字参照は & > < " のみ対応。

CGI.unescape_html('©') # => "©"

CGI.unescape_html('&') # => "&"
CGI.unescape_html('
') # => "\n"


gem: htmlentities

HTMLEntities.new.decode('©') # => "©"

HTMLEntities.new.decode('&') # => "&"
HTMLEntities.new.decode('
') # => "\n"


gem: Nokogiri

Nokogiri::HTML.parse('©').text # => "©"

Nokogiri::HTML.parse('&').text # => "&"
Nokogiri::HTML.parse('
').text # => "\n"


gem: Oga

YorickPeterse/oga: Oga is an XML/HTML parser written in Ruby.

Oga::HTML::Entities.decode('©') # => "©"

Oga::HTML::Entities.decode('&') # => "&"
Oga::HTML::Entities.decode('
') # => "\n"