swfmillで日本語を正しく取り扱うには?

Flash(SWF)をXMLに変換したり、あるいは逆にXMLからSWFを生成したりするswfmill。XMLに変換できるということは、アクションスクリプト内に記述した変数の中身を置換できたりするということ。つまり、動的に値が変化するFlashを作成することが出来る。

そんなものXMLでやればいいじゃないかと思うかもしれないが、ガラケーのFlash Liteの実装は超テキトーで、仕様書通りに動いてはくれない。そういうわけで、携帯サイト向けのFlash動的生成にはswfmillがよく使われているわけだ。

ところがこのswfmill、日本語を扱うと正しくXML>SWFの変換が行えない。ググると関連する情報が幾つか見つかるが、どれもバージョンが古いモノが対象らしく、私の場合は正しく動作しなかった。

結論から言うと、swfmillの実行オプションとか、そういうもので努力するよりも日本語を数値文字参照に置き換えてしまった方がよい。以下はPHPのサンプル。


$sentence = '日本語の文字列。';
$xml = file_get_contents( 'XMLファイルへのパス' );
$xml = str_replace( '%%randomSentence%%' , mb_convert_encoding($sentence, 'HTML-ENTITIES', 'UTF-8'), $xml );

mb_convert_encodingを用いて数値文字参照に変換するのがポイント(参考)。’HTML-ENTITIES’を指定すると数値文字参照に変換できる。こうして置換したXMLをswfmillを用いてSWFに変換すれば、正しく日本語が扱えるという具合だ。ググるといろいろな方法が見つかったが、まともに動いたのは私の場合この方法だけだった。

コメントを残す

メールアドレスが公開されることはありません。