SWFObject の addVariable で渡す値は URL エンコードした方がよい

SWFObject の addVariable を使って何らかのパラメータを渡す際には、その値を URL エンコードした方がよい。 値に & などのスペシャルキャラクタを含むと正しく渡らない可能性があるからだ。

例えば、

so.addVariable("hoge", "http://example.com/?a=100&b=200");

このコードは、SWFObject によって、以下の param タグに変換される。

<param name="FlashVars" value="hoge=http://example.com/?a=100&b=200" />

FlashVars は、名前と値のペアの連結に & を使うため、Flash 内部では

hoge = http://example.com/?a=100;
b = 200;

と解釈されてしまう。 従って、値を escape() で URL エンコードする必要がある。

//JavaScript
so.addVariable("hoge", escape("http://example.com/?a=100&b=200"));
//ActionScript
this.hoge = unescape(this.hoge);
trace(this.hoge); //->http://example.com/?a=100&b=200