Hatena::Grouprubyist

yuichi_katahiraのRuby日記 このページをアンテナに追加 RSSフィード

 | 

2008-04-07

文字実体参照ってどういう場面で出てくるんだろ?

| 09:04 | 文字実体参照ってどういう場面で出てくるんだろ? - yuichi_katahiraのRuby日記 を含むブックマーク はてなブックマーク - 文字実体参照ってどういう場面で出てくるんだろ? - yuichi_katahiraのRuby日記 文字実体参照ってどういう場面で出てくるんだろ? - yuichi_katahiraのRuby日記 のブックマークコメント

昨日、Twitterで、Rubyで実体参照文字列を普通の文字に戻すのはどうするのってなつぶやきが。

" とか & とか < かなと思って

require 'cgi'
CGI.unescapeHTML("&lt;")

とreply


そしたら「日本語が実体参照文字列化されていてそれを戻したい」って事らしい。

適切に文字コードを設定すればOKって事で

require 'cgi'
$KCODE='u' #UTF-8の場合
CGI.unescapeHTML("&#x3042;")

とか


NKF.nkf(opt,CGI.unescapeHTML("&#x3042;")) 

とか使えばOKではって返して終了したんだけど・・

Railsで出くわしたことはないのですが、Ruby使ってると出くわすことあるのかな?

こういう状態になってるstringが渡されるって、主にどういう場面で出てくるんだろうという興味が。

教えてエロイ人!

yyamasakyyamasak 2008/04/08 20:52 おじゃまします。もっと早く知っていれば・・・

つい最近RailsでXMLのAPIを作ろうとしたとき、

render :xml=>User.find(:first).to_xml

とかやるとXMLのレスポンスが返ると知ったんですけど、テキストノードが実体参照文字列になっていて
読めないといわれたことがありました。

最初は無理やり戻すメソッドをどっかから拾って来る。
class String
def xml_unescape
gsub(/(?:&#\d+;)+/){|s| s.split(/&#|;/).reject(&:blank?).map(&:to_i).pack('U*')}
end
end

でもやっぱりそもそも変換して戻すなんて無駄だからActiveRecordのメソッドを上書き。
class String
def to_xs
self
end
end

なんてことをしていました。

yuichi_katahirayuichi_katahira 2008/04/09 09:38 >yyamasakさん
マジですか!!おお、本当だ・・。
そういえばto_xml使ったことなかったです。
こんな身近な所にあったなんて・・・。
ありがとうございます。

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/yuichi_katahira/20080407
 |