トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   サーバ関連【CGI・FCS・XMLSocket etc】
     FLASHAのURLエンコーディングについて
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Setojin
Åê¹ÆNo.31812
投稿日時: 2007-2-7 11:09
新米
居住地:
投稿: 5
使用環境:
Win98SE,FLASH MX
FLASHAのURLエンコーディングについて
初めて投稿させていただきます。
フラッシュで投稿フォームを作り、CGI側にデータをデータを渡したいのですが、
"_"や"$"などの文字はエンコーディングされ、"%5F"・"%24"となりCGIが受け取ってくれません。
これをCGI側を変更せずに、"_"や"$"のまま渡す方法はあるのでしょうか?
HTMLのフォームの場合は問題ないのですが・・・。
どなたかご存知の方がおられましたら、その方法をご伝授いただけたらと思い、初投稿とさせていただきました。
よろしくお願い申し上げます。

使用FLASH MX。
KURAGE
Åê¹ÆNo.31813
投稿日時: 2007-2-7 12:00
常連
居住地: 東京都
投稿: 199
使用環境:
Flash 4?8/Lite 1?2
2000/XP
OSX 10.3
qurage.net
AS2HTML
Re: FLASHAのURLエンコーディングについて
こんにちは

"$"に関しては"%24"にURLエンコードされるのが正しい仕様なので、CGI側のデコーダを修正する事になるかと思います。
またHTMLフォームからの場合は問題無い、との事なので値が受け取れないのは別の箇所に問題があるのかもしれません。

どうしてもURLエンコードさせずにFLASHから値を送信したい場合はLoadVarsクラスのLoadVars.toString()をオーバーライドする事で実現出来ますが、動作保証はされておりません。
Setojin
Åê¹ÆNo.31824
投稿日時: 2007-2-7 22:39
新米
居住地:
投稿: 5
使用環境:
Win98SE,FLASH MX
Re: FLASHAのURLエンコーディングについて
KURAGE様、返信ありがとうございます。
えっと、
FLASHフォームの場合、HTMLフォームでいう"name"に"_"が入っていると駄目なようなのです。
"$"は"name"ではなく、CGIに渡す変数なんですがね。
今突き当たっているのは・・・、
例えば、仮に簡単なフォームを作って

 LV = new LoadVars();
  LV.in_name = t1;
  LV.in_mail = t2;
ボタンクリックで
  LV.send(url,"","post");

とした場合、"LV.in_name"・"LV.in_mail"のように"_"が入っていると、CGIが正常に動作しません。
t3 = LV.toString();として内容を見てみると、"_"は"%5F"、"$"は"%24"とエンコーディングされていました。もしかしてこれが原因かなと思ったわけなのです。
試しに"_"をCGI共々に取ってしまうと一応動くようですが、HTMLフォームの場合、"neme"に"_"が入っていてもなんの問題もなく動くものですから。
なお、CGIに関しては、小生は不得意分野。しかも人様がお作りになられたものゆえ、全てを把握しておらず、できれば手をつけずに通りすぎたいと思う次第でして・・・。

それで、"$"に関してオーバーライドで可能とありますが、オーバーライドと申されますと、一旦LoadVars.toString()で値を取得して、その値を再定義すれば良いのでしょうか?
もし、それで可能ならばやってみようと思います。
KURAGE
Åê¹ÆNo.31825
投稿日時: 2007-2-7 23:52
常連
居住地: 東京都
投稿: 199
使用環境:
Flash 4?8/Lite 1?2
2000/XP
OSX 10.3
qurage.net
AS2HTML
Re: FLASHAのURLエンコーディングについて
こんにちは

なるほど、恐らくCGI側でcontrol namesに対してデコードを行っていない事が原因ですね・・・。

LoadVars は LoadVars.toString() で生成された文字列をそのままサーバに送信する仕様みたいなので、
以下のように送信する内容を自前で実装してやればnameをURLエンコードせずに送信する事が可能です。

var myLoader = new LoadVars();
myLoader.toString = function() {
return "in_name=" + escape(this.in_name);
}

現象的にCGI側の修正も数行で済みそうな気がしますので、
制作された方に修正を頼むのが一番手っ取り早いかと思いますが
Setojin
Åê¹ÆNo.31826
投稿日時: 2007-2-8 3:55
新米
居住地:
投稿: 5
使用環境:
Win98SE,FLASH MX
Re: FLASHAのURLエンコーディングについて
KURAGE様、返信ありがとうございます。
お書き添えいただいた方法でやってみました。
"in_name"というnameが生成できたのを確認できました。ありがとうございました。m(_"_)m
それで、あつかましいのですが、もう少し教えていただきたいのですが・・・。
実際は、
LV.in_name = t1;
LV.in_mail = t2;
LV.in_start = inst;



と複数続くのですが、これをどう繋げば良いか分かりませぬ。
一つはできるのですが、その後が・・・
var LV = new LoadVars();
LV.toString = function() {
return "in_name=" + escape(this.in_name);
return "in_mail=" + escape(this.in_mail);
return "in_start=" + escape(this.in_start);



}
LV.in_name = t1;
LV.in_mail = t2;
LV.in_start = inst;



とやっても駄目ですよね。
どうやら全く理解していない私のようです。
KURAGE
Åê¹ÆNo.31832
投稿日時: 2007-2-8 14:05
常連
居住地: 東京都
投稿: 199
使用環境:
Flash 4?8/Lite 1?2
2000/XP
OSX 10.3
qurage.net
AS2HTML
Re: FLASHAのURLエンコーディングについて
こんにちは
送信したい値を & で繋いでやればOKです。

var LV = new LoadVars();
LV.toString = function() {
	var request = [];

	// 送信したいプロパティを列挙する
	var names   = ['in_name', 'in_mail', 'in_start'];

	for (var i in names) {
		var name  = names[i];
		var value = this[name];

		// 値が設定されてない場合は、送信しない
		if (value == undefined) continue;

		request.push(name + "=" + escape(value));
	}

	// 送信する値を&で連結して返す
	return request.join('&');
}
LV.in_name  = "名前";
LV.in_mail  = "hoge@hoge.com";
LV.in_start = "start";
Setojin
Åê¹ÆNo.31840
投稿日時: 2007-2-8 18:47
新米
居住地:
投稿: 5
使用環境:
Win98SE,FLASH MX
Re: FLASHAのURLエンコーディングについて
KURAGE様、返信ありがとうございます。
おかげさまで、CGIがきちんと正常反応してくれました。
具体的な書き方まで丁寧なご説明、心より感謝しております。
まだまだ途上の自分ゆえ、また分からないことがあった時はお教え願えれば幸いです。
本当にありがとうございました。
m(_"_)m ペコペコ
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops