2011-02-07 13 views
1

POST(PHP 2)を使用してPHPメールスクリプトに値をPOSTしようとしています。 私はHTML形式のPHPメールスクリプトを試してみました。Flash(AS2)からPHPへのPOST、出力???英語以外の文字が使用されている場合

しかし、フラッシュからPOSTして英語以外の文字を入力すると、 "????"メールで。

私はutf8_encode($_POST["name"])を試しましたが、役に立たないです。

編集:

私もそれが機能しなかった、utf8_decode($_POST["name"])を試してみました。

更新:(だから、あなたは文句を言わないすべてのコメントを通過する必要が)

  1. 私はFlashで変数を確認し、 値が正しく保存されます。
  2. Flashが埋め込まれているHTMLページは、UTF-8でエンコードされています。
  3. 私はFireBugでPOSTヘッダを見ていましたが、POST自体はすでに "????"実際の価値の代わりに
  4. "?"値は、現在私は混乱を作成し、そのsendAndLoad方法を疑う

$_POST["name"] == "???";が得られ、PHPによりフラッシュすることにより、エンコードされたURL、および復号されます。

アップデート:ここで

は、フラッシュコードです:

System.useCodepage = true; 
send_btn.onRelease = function() { 
    my_vars = new LoadVars(); 
    my_vars.email = email_box.text; 
    my_vars.name = name_box.text; 
    my_vars.family_box = comment.text; 
    my_vars.phone = phone_box.text; 

if (my_vars.email != "" and my_vars.name != "") { 
    my_vars.sendAndLoad("http://aram.co.il/ido/sendMail.php", my_vars, "POST"); 
    gotoAndStop(2); 
} else { 
    error_clip.gotoAndPlay(2); 
} 
my_vars.onLoad = function() { 
    gotoAndStop(3); 
}; 
}; 

    email_box.onSetFocus = name_box.onSetFocus=message_box.onSetFocus=function() { 
if (error_clip._currentframe != 1) { 
    error_clip.gotoAndPlay(6); 
} 
}; 

答えて

1

フラッシュはとにかく、すべての文字列をUTF8エンコーディングを使用しています。 LoadVarsを使用すると、URLエンコードされた文字列としての転送も自動的に機能するはずです。

あなたの問題はおそらくアプリケーションのPHPの部分にあります。たとえば、UTF8が正常に動作するようにするには、すべてのPHPファイルをUTF8エンコード形式に保存する必要があります。

ファイルエンコーディングを変更しても機能しない場合は、最初に$ HTTP_RAW_POST_DATAを解析して、すべてのフィールドが正しく転送されていることを確認してから、エンコーディングが失われる場所を見つけるまで続けてください。

更新:

ここにあなたの問題がある:あなたがSystem.useCodePage = true;を使用しています。これにはspecifically encode all your data as unicode before sending itが必要です。あなたが他のエンコーディングに他のドキュメントを持っていない場合や、ユーザがローカライズされたエンコーディングで自分のテキストデータをアップロードできるようにしていない場合は、System.useCodePage = false;と設定してください。

+0

@weltraumpirat:はい、HTMLフォームから同じスクリプトを提出しても機能しました。私は同じスクリプトに同じデータを提出するときに違いがあるとは思わないか、それともありますか? – Dean

+0

フォームがFlashコンテンツとまったく同じURLエンコードされた文字列を送信しない限り、実際は同じではありません。 – weltraumpirat

+0

@weltraumpirat:FirePHPを使って、$ _POSTデータの最初のものをチェックしました。その前に、他のアクションが実行される前に、すべて "???"でした。それからPOST自体(FireBugを使用)をチェックしたところ、POSTed値は???と表示されます。すべての手がかりは今、フラッシュを指している、私はそれが原因だと思う。 – Dean

1

フラッシュからデータを受け取った場合は、utf8_encodeではなくutf8_decodeを使用する必要があります。

ローカルのキャラクタセットを使用するように指示しない限り、FlashはUTF8を使用します。そして、PHPが内部的に使用する古いISO-8859-1にそれをデコードすることを望みます。

のデータを準備するときは、フラッシュの場合のみutf8_encodeを使用します。

+0

$ _POST値をutf8_decodeしようとしました。それは役に立たなかった。 – Dean

+0

はい、あなたの更新されたコードの例から、あなたはUTF-8を使用しないようフラッシュに指示したことがわかりますが、あなたは既にそれを知っています。私が追加したいのは、useCodePageをfalseに設定する必要はないということだけです。これがデフォルト値です。全体の行をそのままにして、クライアントはすべてUTF8になります。 –

+0

それだけです!どうもありがとう!この情報でyorの答えを更新してください。私はそれを受け入れることができ、他の人は簡単に解決策を見つけることができます。 – Dean

関連する問題