昨日、Twitterで、Rubyで実体参照文字列を普通の文字に戻すのはどうするのってなつぶやきが。
" とか & とか < かなと思って
require 'cgi' CGI.unescapeHTML("<")
とreply
そしたら「日本語が実体参照文字列化されていてそれを戻したい」って事らしい。
適切に文字コードを設定すればOKって事で
require 'cgi' $KCODE='u' #UTF-8の場合 CGI.unescapeHTML("あ")
とか
NKF.nkf(opt,CGI.unescapeHTML("あ"))
とか使えばOKではって返して終了したんだけど・・
Railsで出くわしたことはないのですが、Ruby使ってると出くわすことあるのかな?
こういう状態になってるstringが渡されるって、主にどういう場面で出てくるんだろうという興味が。
教えてエロイ人!
日程調整アプリをつくろうも、回を重ねてだんだん増えてきたので、ローカルにwikiのバックアップを取っておく事に。
エンコーディングは、CotEditorやVimで見るので、そのままeucでいいや。
#!/opt/local/bin/ruby require 'open-uri' require 'rubygems' require 'hpricot' date =Time.now.strftime("%Y-%m-%d") urls=%w( http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0001 http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0002 http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0003 http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0004 http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0005 http://wiki.fdiary.net/rails/?c=edit;p=AdjusterTutorial-0006 http://wiki.fdiary.net/rails/?c=edit;p=AdjusterExtension-0001 ) wikifile="/Users/user_acount/Documents/path/to/wiki-#{date}.txt" File.open(wikifile,"w") {|file| file.puts "AdjusterTutorial-backup"} urls.each do |url| doc = Hpricot(open(url).read) title=doc.at("input[@name='page_title']")['value'] body=doc.at("textarea[@name='contents']").inner_text File.open(wikifile,"a") {|file| file.puts title file.puts body } end
Hpricotお手軽だなー。
つい最近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
なんてことをしていました。
マジですか!!おお、本当だ・・。
そういえばto_xml使ったことなかったです。
こんな身近な所にあったなんて・・・。
ありがとうございます。