エスケープ

xmlつうかrssで取得した中身に入ってる をどうやったら戻せるのか?そもそも>を'>'に変換することをなんていうのか分らないので検索さえできない.

グーグル先生を問い詰めて,実体参照とかエスケープとかいうキーワードを聞き出すものの,常識的過ぎて誰も書かないのか,それとも>を戻したりしないのか,探し方が悪いのかなかなか見つからない.

ようやく2007-02-13 - nazonoDiaryにたどり着く.これですよこれ.


utf8は使わないのでsjis用に改造してみた:

require "cgi"
require "kconv"

class CGI
  # HTMLエンティティーの定義
  HtmlEntityList = Hash[ *%w(nbsp 160 iexcl 161 cent 162 pound 163 curren 164
       (略)
    rsaquo 8250 euro 8364) ]

  HtmlEntity = HtmlEntityList.inject({}){|r,v|
    a = [v[1].to_i].pack("U")
    case $KCODE
    when 'SJIS'; a = a.kconv( Kconv::SJIS, Kconv::UTF8)
    end
    r[v[0]] = a if a!="" or v[0]=='nbsp'
    r
  }

  # CGI.unescapeHtml の修正版
  def self.unescapeHTML( string )
    string.gsub(/&([^&;]{2,8});/n) {|ma|
      HtmlEntity[$1] or ma
    }
  end
end

def unescape str; CGI.unescapeHTML str; end

リストにないエスケープ文字列の扱いがオリジナルと違ってます.




最初にブラウザ上で書いてコミットしたらメンテ中ってなって文章が消えた.対した量じゃないけど.ちゃんとエディタに書いてからコピペすればよかった.