escapeHTMLはcgi.rbの中を見ていただければ分かりますが、gsubで変換しているだけです。
正規表現の否定先読みを使い、除外したいものを指定すれば良いはずです。
def escapeHTML(string) string.gsub(/&(?!(?:amp|quot|lt|gt|#(?:\d+|x[0-9a-f]+));)/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<') end
ちょっと正確か自信がないのですが、イメージは伝わると思い、回答いたしました。
参考にしてみてください。
ありがとうございます。少しずつ確認してみます。
#(?:\d+|x[0-9a-f]+)
・# に続く 後方参照を伴わないグループ化(10進数値文字参照形式 または 16進数値文字参照形式)
・16進数値文字参照形式は 小文字(x) または 大文字(X) を考慮する必要があるので要修正
HTML 4.01仕様
・http://www.w3.org/TR/1999/REC-html401-19991224/charset.html#h-5....
・http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/charset.html#h...
組み込み変数 $KCODE - "NONE" のときはマルチバイト文字列を認識しません
・http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.h...