CGI.unescapeの挙動

nazonoDiary - [Ruby]Hpricot からテキストを取り出す
http://d.hatena.ne.jp/nazoking/20070202/1170428250

をやってみて気づいた。ruby 1.8.5 (2006-08-25) [i686-darwin8.7.1]にて。

CGI.unescapeHTML('& &')
  #=> "& &"

もちろん&単体が入っているのが問題であって,後の&が処理されていないのは仕方ないとも考えられるけど,手打ちのHTMLとかだと入っていたりしてもおかしくないので処理できた方が好ましい気もする。

cgi.rb 370行目の

string.gsub(/&(.*?);/n) do

string.gsub(/&([a-zA-Z1-9]*?);/n) do 

とかにすれば大丈夫なはず。

既出かもしれないのでとりあえずこちらに上げて様子を見てみる。というよりid:nazokingさんはちゃんと動作しているようなのでもしかすると自分だけかも。

追記 02/11

MLに流したところ,&\#106;などの表記に対応できない点がまずいそうです。