prototype.js の escapeHTML


prototype.js では String オブジェクトに escapeHTML, unescapeHTML などという function が追加されているわけなんだが、これがいまいち期待どおりの仕様じゃない。


ダブルクォート、シングルクォートをエスケープしてくれないので、innerHTML に入れるときにはいいんだけど、value とかのアトリビュートに入れるときに困る。

Perlで言うと

s/&/&/g;
s/</&lt;/g;
s/>/&gt;/g;
s/"/&quot;/g;

の動作をして欲しい。


とりあえずやっつけ気味で

String.prototype.myEscapeHTML = function() {
    return this.escapeHTML().replace(/"/g, "&quot;").replace(/'/g, "&apos;");
}
String.prototype.myUnescapeHTML = function() {
    return this.escapeHTML().replace(/&quot;/g, '"').replace(/&apos;/g, "'");
}

とかしてみた。

あんまりかっこよくない・・・

他にいい方法があるのかな。