[PHP]: JavaScriptで「escape」された文字列をデコードする関数「unescape」

2008/07/22 15:42:47
カテゴリ:Web > Flash (FMS, AS)

と言いつつ、実はJavaScript、というよりActionScript関連です。

最近 Adobe Airの、とあるツールを作ってます。
ASは、Flashのオーサリング専門でやってる人間に任せてるんですが、
自分は彼の作ったAirアプリから、サーバーサイド(PHP)に送信されるデータの処理を担当してます。

で、そのAirアプリから送信されるデータの取り合いをXMLにしたんですが、
文字化け防止のために、エンコードして送ってくれました。
それ自体は問題ないんですが、何に変換してくれたかというと、JavaScriptにしかない「escape」関数を使ってくれました。 (やっぱりASの関数は、基本JavaScriptなんですよね。)

うぅ、PHPには「unescape」無いんだよー、「encodeURI」使って欲しかったよー、
つっても彼は本当にFlashしか知らないので、仕方がありません。
このままでどーにかならないものか、と調べてたら、ちゃんとデコーダを作ってくれた人が居ました。

「unescape(PHP)関数 Javascript版escape日本語POST対応」で紹介されてる、
PHPマニュアルの、「utf8_encode」のページの「User Contributed Notes」の中の1人 。

おぉ、すばらしい!
なんか、

文字列に"-"(ダッシュ)が含まれると、それ以降が抜けるらしい。

Lupin's Weblog: PHP: Javascriptのescapeに対応したunescape関数のバグ

というバグもあるらしいので、こちらも参照してみて下さい。

何にせよ助かりました。

使い方も簡単ですね。
記載されてるfunctionを定義して、

$str = unescape($str);

で、デコードされます。

[FMS]:Flash Media Server 2 の Debug Mode 設定

2008/06/24 17:31:12
カテゴリ:Web > Flash (FMS, AS)

FMS2の コンソール(fms2_console)を利用すると、サーバーサイドスクリプトのtrace内容とかをデバッグできますが、Shared Objectsの中身もデバッグできるみたいです。
「Veiw Applications」タブの中で、アプリケーションを選択後、「Shared Objects」タブを選択すると、Shared Objectの一覧が表示されます。

でも、個別のShared Objectを選択すると、

Failed to make a debug connection, please check that the application is in debug mode

とエラーが出て、中身が見れません。
「debug mode」かどうか確認、と言われても、そんなことスクリプトで設定できるのかな? と、数少ない書籍(しかも、FCS向け)を熟読するも、そんなことはどこにも書いてません。

FMS関連の情報は、ググってもなかなか情報が無いので、仕方なくFlash Media Serverのリソースをひたすら検索したら、わかりました。

基本的に、デフォルトではデバッグ不可になっていたようです。
「デバッグモードか確認しろ。」じゃなくて、「デバッグの設定が true になってるか確認しろ。」と言ってくれれば、早かったのにorz

で、許可する方法ですが、「Application.xml」という設定XMLファイルで行います。
Application.xmlは、「インストールディレクトリ /conf/_defaultRoot_/_defaultVHost_」の中にあります。
サーバ丸ごとデバッグを許可するなら、こいつの

<AllowDebugDefault>false</AllowDebugDefault>

を、「true」にして、サーバ再起動。

特定のアプリケーションだけ許可するなら、Application.xmlを、そのアプリケーションディレクトリにコピーして、同様に編集するだけ。
サーバの再起動が面倒だったので、アプリケーションをリロードだけで行けるかな?
と思ったけど、反映されませんでした。
でも、「明日でいっか。」と放っておいて、ブラウザからのテストのコネクションも全部切断、コンソールも終了、で他の仕事して、また戻ってきたら有効になってました。

何がトリガーなのか不明ですが、まぁOKってことで。