ActionScript 3.0では、escape()関数の動作が2.0/1.0とは一部変わりました。たとえば、"F-siteセミナー"という文字列をescape()関数でURLエンコードすると、ActionScript 3.0と2.0/1.0の結果はそれぞれつぎのような文字列になります。
【ActionScript 3.0】
F-site%u30BB%u30DF%u30CA%u30FC
【ActionScript 2.0/1.0】
F%2Dsite%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC
実は、JavaScriptのescape()関数も、Unicodeをサポートするブラウザ上では、ActionScript 3.0と同じ結果を返します。変換対象はASCII文字以外なので、ハイフン("-")はそのまま返します。また、Unicodeをサポートするブラウザでは、2バイト文字を「%uxxxxという形式で2バイト文字にエンコードします」。この仕様は、ECMA-262にもとづくようです。
ActionScript 2.0/1.0のescape()関数は、2バイト文字をUTF-8でエンコードしていました。ActionScript 3.0で文字列をUTF-8でエンコードするには、flash.utils.escapeMultiByte()関数を用います[*1]。
import flash.utils.escapeMultiByte;
var _str:String = escapeMultiByte("F-siteセミナー");
trace(_str); // 出力: F%2Dsite%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC
[*1] デコードするには、flash.utils.unescapeMultiByte()関数を使います。なお、これらの関数については、akihiro kamijo「文字列のエスケープ」をご参照ください。
この記事へのコメント
●1.akipponn(2007年10月04日 16:23)
ありがとうございます。救われました~!
●2.shinro(2007年11月14日 16:32)
同じく救われました。ありがとうございました~!