ユーザーがインターネット上の画像への URL を入力し、URL が指す画像をフラッシュ ロードできる Flex アプリケーションを構築しています。source
これは、(プロパティを設定するか、または を呼び出すことload()
により)特殊文字を含まない URL に対して正常に機能しますImage
。ただし、すでにエスケープされている特殊文字を含む URL が送信されると、つまり、ほとんどの場合、ブラウザーの URL バーから直接コピーされるだけでURLRequest
、パーセント記号が「%25」で再度エスケープされ、URL が無効になり、サーバーがエラーを返します。ただし、ブラウザに同じ URL を貼り付けると、画像が正常に読み込まれます。URLを試してみdecodeURI()
ましたが、それは大量の文字を無視するので、試してみましたdecodeURIComponent()
。すべてが正しくデコードされますが、URLRequest
再エンコードに行くと、デコードされた特殊文字は無視され、エスケープされません。したがって、この場合、URL は無効です。まだ安全でない文字が含まれており、失敗するためです。では、特殊文字 (エンコードまたはエンコードなし) を含むものを送信URLRequest
して、実際に機能させるにはどうすればよいでしょうか? 本当に、それが私の URL で何もしないで、それが有効かどうかを判断させてくれたらいいのにと思いますが、それは Flash Player グローバル swc に埋め込まれているため、クローズド ソースの Flash であり、ソースが表示されません。コード。どんな助けでも大歓迎です!
これは基本的に私がやっていることです:
var image:Image = new Image();
image.source = textInput.text;
そして、私がテストしてきた URL は、ゲッティ イメージからのものです。
コードをステップ実行すると、loadContent()
関数 in SWFLoader
(Image
拡張) で、 afterrequestedURL
が から作成され、オブジェクトnew URLRequest
のurl
プロパティのURLRequest
すべてのパーセント記号が (再び) '%25' でエスケープされ、次の URL が生成されます (これは を返します)。 Getty からの 500 エラー):
アップデート
Image
Flex SDK 4.1 を実行していることを忘れていました。mx.controls.Image
- wvxvwの提案に基づいて、
unescape()
使用したのと同じ結果で試しましたdecodeURIComponent()
encodeURI()
でデコードした後に URL を呼び出してみましたdecodeURIComponent()
が、もちろん、デコードされた URL にある多くの安全でない文字を無視し、再エンコードしません。URLRequest
同じことを行うため、最後に呼び出される URL はエンコードされず、失敗します。- 興味深いことに
encodeURIComponent()
、URL を呼び出して渡す前に再エンコードしようとしたときにURLRequest
、おそらく既に '%25' になっているため、パーセントを再エンコードしませんでしたか? - 最終的に、「%」記号のみを探し、それらを単に「%25」に置き換え (「25」がまだ続いていない場合)、他の安全でない文字を無視するようです。なぜそれをするのでしょうか?そして、なぜこれまで誰もこの問題に遭遇しなかったのでしょうか?