escape()とendodeURIComponent()

 はてなブックマーク日記(2005-03-05)のコメント欄を拝見して。

 はてな様謹製のブックマークレットではURIエンコードにescape()が使われてます。ちなみにいまの主流はendodeURIComponent()ですね(^^)


 endodeURIComponent()はRFC 2396 準拠の関数で、encodeURI(), decodeURI(), decodeURIComponent()と共に ECMA-262 3rd Edition に対応するECMAScript v1.5にて導入されたはず。ちなみにIEでは、JScript v5.5(IE5.5)で導入されました。
 「?」や「#」等をエスケープせず、非表示文字や多バイト文字のみをエスケープする URL全体変換用のencodeURI()関数と、「?」や「#」等の制御文字も含めて全てエスケープする URL引数変換用のendodeURIComponent()の2種類を使い分けることが出来て、便利になりました。特に (http://b.hatena.ne.jp/entry?URL見たいに) URI自体を別のURLの引数にするときには。


 ですから、ブックマークの登録や表示の際にはendodeURIComponent()やdecodeURIComponent()を使用するのが好ましいといえます。
 唯一、はてなダイアリーでendodeURIComponent()を使う際の問題としては、文字コードの扱いでしょう。endodeURIComponent()は多バイト文字をUTF-8で扱うので、EUC-JPを扱うダイアリーとは相性が良くありません。具体的には、ダイアリーキーワードURIが化けてしまいそうです。escape()はISO Latin-1 (8859-1)ベースなので、比較的相性が良かったんですけどねぇ。*1

*1:システム的にもJcode.pm 0.57以前では(ユニコード対応の問題で)トラブルと思う。