AS3 のドキュメントによると、AS3 の文字列は UTF-16 形式です。
Flash クリップには、ユーザーがデータを入力できるテキスト ボックスがあります。
ボタンがクリックされたときに、このデータを php スクリプトに送信したいと考えています。
すべての設定が完了しましたが、PHP スクリプトはデータを UTF-16 形式で取得しているようです。データベース内のデータ (utf-8) に、認識できない文字 (特殊文字が使用されている場所) がいくつか表示されます。これは、データが正しいエンコーディングで送信されていないことを意味します。
var variables:URLVariables=new URLVariables;
var varSend:URLRequest=new URLRequest("http://website.com/systematic/accept.php");
varSend.method=URLRequestMethod.POST;
varSend.data=variables;
var varLoader:URLLoader=new URLLoader;
varLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
varLoader.addEventListener(Event.COMPLETE, completeHandler);
送信ボタンがクリックされると、次のハンドラが実行されます。
function sendData(event:MouseEvent) : void {
// i guess here is the problem (tbName.text is UTF-16)
variables.name = tbName.text;
varLoader.load(varSend);
}
PHPスクリプトがUTF-8形式でデータを取得するようにデータを送信する方法はありますか?
(PHP スクリプトは $_POST['name'] を使用して値を取得しています)。
編集(有用なコメントの後):
iconv() を使用して POST 変数を UTF-8 に変換しようとしましたが、疑問符しか表示されません。これは、php が文字列を UTF-16 形式で取得したと仮定したのが間違っていたことを意味している可能性があります。そうではないようです。しかし、今ではこれを修正する方法がまったくわかりません。
問題の文字はクロアチア語の文字 (č、ć、š、ž、đ) で、すべて Windows-1250 エンコーディングです。phpMyAdmin のエントリを手動で編集し、これらの文字のいずれかを入力すると、すべてがうまく機能します。しかし、フラッシュを介して実行している場合、機能しません。
もう1つの奇妙なことは、iconvを削除して、最初のようにすべてを配置したことで、最初のクロアチア語に非特殊文字のみが表示されるようになりました. たとえば、「ačasdfadfa」と書くと、「a」だけがデータベースに格納されます。
別の編集:
ここで、クロアチア語の文字を ASCII に変換して (以下のコードを参照)、PHP 側で č や ć などに戻そうとしました。Flash は明らかにこの権利を転送します (特殊文字がなくなったため) が、PHP は文字を文字列に正しく変換しません。これが私がしていたことです。
だから、それはPHPの何か、またはデータをデータベースに保存する方法だと思います。PHP ファイル自体は UTF-8 でエンコードされています。