0

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 は文字を文字列に正しく変換しません。これが私がしていたことです。

http://pastebin.com/qjVcrNuV

だから、それはPHPの何か、またはデータをデータベースに保存する方法だと思います。PHP ファイル自体は UTF-8 でエンコードされています。

4

2 に答える 2

0

疑問符が表示されている場合は、フラッシュではなく、PHP の解析が間違っている可能性があります。

この .htaccess ファイル (php5 用) を、日本語で作業しているサイト、または特殊文字を含むサイトのベース ディレクトリに配置しました... PHP の問題の 99% は解決されますが、入力文字列を監視する必要があります (私はこれはまだ自分でも慣れています)

<IfModule mod_php5.c>
  php_flag  output_buffering              Off
  php_value output_handler                none
  php_value default_charset               UTF-8
  php_value mbstring.language             japanese
  php_flag  mbstring.encoding_translation On
  php_value mbstring.http_input           auto
  php_value mbstring.http_output          UTF-8
  php_value mbstring.internal_encoding    UTF-8
  php_value mbstring.substitute_character none
</IfModule>
于 2011-08-09T04:08:13.643 に答える
0

アップデート:

それが実際に Flash から取得している UTF-16 データである場合は、簡単な修正として、PHP で入力を変換してみてください。

$name = iconv("UTF-16", "UTF-8", $_POST["name"]); 

それを試して、データが正常に見えるかどうかを確認できます。ただし、可能であれば、Flash に UTF-8 データを送信させることが望ましいと言えます。

古い答え:

<speculation>

これは私には UTF-16 のようには聞こえませんが、ISO-8859-1 でエンコードされた環境で表示される UTF-8 データのように思えます。変数をどこに出力していますか?あなたが出力しているページもUTF-8でエンコードされていますか? (ブラウザの「エンコーディング」メニューを参照してください) あえて言えば、Flash はそれらを UTF-8 として正しく送信していると思いますが、問題は出力側にあります。

</speculation>

于 2010-06-08T10:07:28.077 に答える