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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   サーバ関連【CGI・FCS・XMLSocket etc】
     PHP(文字コードEUC)からFlashへ引渡し時の文字化け
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
joyko
Åê¹ÆNo.38687
投稿日時: 2008-5-6 16:30
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
PHP(文字コードEUC)からFlashへ引渡し時の文字化け
2009年9月8日、最近、PHPを真面目に、勉強し出し、以下の課題は、PHPのmb_convert_encodingの方法を変更することで、文字化けは解決しました。
やはり、基本が大事ですね。

====================
皆さん、
今日は。いつも、お世話になってます。
【使用環境】
1.PC:WindowsXP(SP2)
2.Flash:CS3使用し、AS2.0で記載し、Professional8で保存
3.ローカルWebサーバー:Apache2.0.53
4. PHP:php5.0.4
php.iniで、
mbstring.internal_encoding=EUC-JP
mbstring.script_encoding=EUC-JP
としてます。

今回の質問は、タイトル通り、PHPのprint ("&mess=XXXXX);で、Flashに引渡してやると、ローカルのApacheサーバーでは、文字化けなく、正しく表示されますが、本番のサーバーにアップすると、文字化けが起こってしまうことに関する質問です。

とりあえず、問題を単純化した、urlを2つ示させて頂きます。

?は、FlashのURLで、これが、文字化けを起こします。
? http://joy.life.coocan.jp/questions/counter.html

?のurlは、Flashを使わずに、phpとphpで行ったケースですが、サーバーアップ後でも、文字化けを起こしません。
counter.phpで単純なカウントをしてますが、このcounter.phpは、Flashと共通で使うようにしてます。
? http://joy.life.coocan.jp/questions/nameinput.php

【実施したこと】
1.Flashには、定番の方法で、第一フレームのscriptレイヤーに以下のように記載しました。

this.stop();//念のため、
System.useCodepage = true;//文字化け防止
send_txt.text = "";
rcv_txt.text = "";

my_lv = new LoadVars();
my_lv.onLoad = function(success) {
if (success) {//successなら、_rootに配置した、ダイナミックテキストrcv_txtに、phpで生成された、messを代入する
_root.rcv_txt.text = this.mess;//受信するオブジェクト my_lvの&mess=XXXXXXをrcv_txtに代入する
} else {//successでないなら、事前に用意した、言葉を代入する
_root.rcv_txt.text = "読み込み失敗です!";
}
};

send_btn.onRelease = function():Void {
System.useCodepage = true;//念のため、文字化け防止
my_lv.Name = send_txt.text;//テキスト入力を、変数 Name に代入して、保存
//trace(my_lv.Name);
my_lv.sendAndLoad("counter.php",my_lv);//Nameを、counter.phpに、送信し、my_lvで、受信する
};

2.counter.php(リロード対策もFlock処理もしてない単純なカウンタです。)側には、
<html>
<head>
<title>LoadVarsの変数(Name)を受け取り、PHP処理結果を、FLASHに表示</title>
</head>
<body>
<?php
$num=file_get_contents("log.txt");//外部のlog.txtファイルの数値を読み込む

$num=$num+1;//1つカウントアップさせる

$fp=fopen("log.txt","r+");//log.txtを開き、r+、即ち、読み込み、書き出し用。ファイルポインターを先頭に置く

fputs($fp,$num);//ファイル$fpに、$numを書き込む

fclose($fp);//ファイル$fpを閉じて、元に戻す

if($num%7==0){//7の倍数の時は、以下を処理し、

print ("&mess=".$_POST['Name']."さんは".$num."番目で、Lucky7です&");

}else{//そうでないときは、以下とする

print ("&mess=".$_POST['Name']."さんは".$num."番目で、普通です&");

}

?>
</body>
</html>

3.Flashではなく、もう一つのインプット用のnameinput.phpは以下のようにしました。

<html>
<head>
<title>Flashテスト前の事前テスト</title>
</head>
<body>
<p>1. 総訪問回数のうち、7の倍数に訪問した際には、Lucky7と表示されます<br>
2. そうでない場合は、"普通"と表示されます</p>

<form method="post" action="counter.php">
お名前:
<input type="text" name="Name" size="20" maxlength="30" />
<input type="submit" value="送信" />
</form>

</body>
</html>

長くなりましたが、質問させて下さい。
【質問】
1.ローカルのApacheで見たときは、Flashでも、nameinput.phpでも文字化けなく、見えて、LaCoocanのサーバー(PHP5.2.5サポート中)アップ時には、Flashだけが文字化けを起こすのは、なぜでしょうか?まさか、LaCoocanのPHP5.2.5がShift-JIS前提などとは、考えてもいませんので。
2.もし、ローカルApacheとLaCoocanのサーバーサイドの設定の差、(まさかではありますが、)もしくは、PHPのコード設定の差から来ているとすれば、LaCoocanの設定を私が変更できませんので、私サイドで、対処する必要がありますが、どういう方法があるでしょうか?print();を吐き出す、counter.phpサイドで、encodingし直す方法もあろうかと思いますが、具体的な方法が、分かりませんので、教えて頂けると助かります。

宜しくお願いいたします。
ひろゆき
Åê¹ÆNo.38688
投稿日時: 2008-5-6 23:23
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
まず、明らかな間違いから。
引用:
joykoさんは書きました:
System.useCodepage = true;//文字化け防止

これは文字化け防止のスクリプトではありません。
Shift_JISを文字コードとして用いるためのスクリプトです。
詳細は、ヘルプをお読みください。

EUC-JPを用いているPHPでは、上記スクリプトは無意味です。

XMLを使用しての日本語表示

Flashの内部的にはUTF-8なので、
PHPが吐き出す文字コードをUTF-8にすれば問題は解決すると思います。

$mess = mb_convert_encoding($mess, "UTF-8", "EUC-JP");
#ただし、これは、PHPの問題であって、Flashの問題ではないと思いますが。


----------------
質問する際は、回答者に具体的な情報を与えてください。

joyko
Åê¹ÆNo.38691
投稿日時: 2008-5-7 1:49
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
ひろゆきさん、
早速のご回答ありがとうございます。
ご指摘の文字化けは、確かに、正しい表現ではないです。UTF-8標準のFlashをShift-JISで使うときの一手段でしかないですね。失礼しました。
早速、お教え頂いた、
$mess = mb_convert_encoding($mess, "UTF-8", "EUC-JP");
を、Flash上のSystem.useCodepageを削除し、PHPに追記し、試してみましたが、ローカルのApacheサーバーでも、英数字を除き、文字化けが発生し、LaCoocanにアップしても、やはり、英数字を除き、文字が化けます。
(前は、ローカルApache上では、正常表示→これも、PHPはEUC記載なのに、Flashには、System.useCodepage=true;と記載してましたので、理屈に合わないのですが、ローカルでは、立派に表示されてました、LaCoocan上では、文字化け発生)

サーバーの環境というよりは、私のローカル環境とLaCoocanでのPHPの設定が違っているのかとも思い、niftyに問い合わせてみますし、もう少し、色々条件を変えて、弄ってみます。

尚、TeraPad使って、EUCでPHPスクリプト記載してます。念のため、メモ帳で開くと、立派に、文字化けしますので、PHPの文字コードが、Shif?JISということはないと思います・・・

もう少し、調べてみます。糸口をありがとうございました。

(追記です)
?のFlashで表示させない方法では、自分のPCでLaCoocanを見ると、文字化けなかったですが、自分の環境外の全く、別のPCで見と、やはり、文字化けしてました。一方が文字化けしなくて、一方が正常だと理由が分かりにくいですが、共通問題なので、むしろ、糸口がみつかるもしれないです。
うじゅ
Åê¹ÆNo.38702
投稿日時: 2008-5-7 16:39
半人前
居住地:
投稿: 31
使用環境:
WinXP
MX Pro2004, Flash8
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
ほぼひろゆきさんのご指摘のとおりだと思いますが、php 的アドバイスを少々

flashを埋め込むHTMLは utf-8 で出力するのがよいかと思います。
PHPの設定により必要なら以下を記述しておくとよいかと思います。
mb_http_output("utf-8");

また、このページのEmbed(Object)タグでFlashVarsを渡すとき2バイトが含まれるなら、
"param=". rawurlencode($value)
としておくのがよいかと思います。
mb_convert_encoding() を通した後でも2バイトならURLエンコードしておかないと文字化けするかも?
2バイトじゃなくても、値に「%」「=」「&」などが含まれている可能性がある場合、URLエンコードしておくのがいいでしょう。

Flashから値を受け取る側のPHPも、受け取ったデータはUTF-8 それを表示・保存するのは EUC-JP ということを念頭に置いて適切に変換する必要があります。
System.useCodepage = true にしたら受け取るデータはクライアントのシステムのエンコードになってるかもしれないので false にするべきでしょう。

可能ならFlashを使う場合、PHPの設定を
default_charset "utf-8"
mbstring.internal_encoding "utf-8"
mbstring.http_output "utf-8"
に出来ると考えることが減ります。これはアパッチの設定で VirtualHost や Location ディレクティブによる一部だけの設定変更も可能です。


----------------
UJU

joyko
Åê¹ÆNo.38703
投稿日時: 2008-5-7 17:38
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
うじゅさん、
ご返信ありがとうございます。
今、手元に、Flashがなく試せないですが、早速、試してみます。
貴重な情報ありがとうございました。結果は、また、ご報告いたします。
joyko
Åê¹ÆNo.38762
投稿日時: 2008-5-11 16:37
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
ひろゆきさん、うじゅさん、
今日は。
結果報告してなかったので、報告致します。
結果は、
1.niftyのLaCoocanのPHP5.2.5のphp.iniをDownLoadし、その設定値に、ローカルで使用中の、PHPをあわせ(たつもりかもしれないです??)、EUC-JPからUTF-8に変換し、ローカルで試しましたが、(Flashは、UTF-8としてます)文字化けを起こしてしまいます。そこで、ローカルのPHPを、元の設定値に戻し、FLash側を、System.useCodepage=true;にして、PHPから、EUCーJPから、Shif-JISで吐き出させると、Flashで文字化けなく、表示してくれます。
2.次に、ローカルで生成したSWFとPHPを、LaCoocanにアップし、PHP5.2.5で処理させて、Flashで変数を受信すると、やはり、文字化けします。

どうも、ローカルのPHP設定と、LaCoocanのPHP設定の差から、生じている問題だということはハッキリしました(ひろゆきさんのおっしゃるように、Flashの問題ではありません)。解決に至ってないですが、もう少し、PHPの設定等を研究してみようと思いますので、このスレは、終了とさせて下さい。

ご助言、ありがとうございました。
うじゅ
Åê¹ÆNo.38765
投稿日時: 2008-5-12 1:30
半人前
居住地:
投稿: 31
使用環境:
WinXP
MX Pro2004, Flash8
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
終了ということですが参考になるテストHTMLを作ってみたので公開してみます。
http://www.ujuworld.com/encode_test/

「パラメータ入力」に2バイト文字を入力して「更新」を押すと
「タグプレビュー」にHTMLタグを表示し、「SWFプレビュー」にSWFを描画します。

JavaScriptにてURLエンコードして、タグを書き出しています。
「SWFプレビュー」には、単純に _root.text をダイナミックテキストに書き出すSWFを埋め込んだタグを書き出します。

「SWFプレビュー」に正常に日本語が表示されるなら、PHPで「タグプレビュー」と同様のタグを書き出せばいいことになりますので、いろいろなパターンの mb_convert_encoding を通して表示して、同じになるパターンを採用すればいけることになります。

php.ini の方は、output_buffering, output_handler あたりも関係しているかもしれません。phpinfo() で比較してみるのもいいかも?




----------------
UJU

ひろゆき
Åê¹ÆNo.38766
投稿日時: 2008-5-12 3:37
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
引用:
joykoさんは書きました:
PHPから、EUCーJPから、Shif-JISで吐き出させると、Flashで文字化けなく、表示してくれます。

前の投稿から気になっていたんですが、
「EUCーJP」ではなく「EUC-JP」
「Shif-JIS」ではなく「Shift_JIS」
だと思うのですが。


----------------
質問する際は、回答者に具体的な情報を与えてください。

joyko
Åê¹ÆNo.38774
投稿日時: 2008-5-12 21:59
常連
居住地: 埼玉県
投稿: 167
使用環境:
WinXP(SP3)
Flash8 Basic
FlashCS3
Flash CS4
Re: PHP(文字コードEUC)からFlashへ引渡し時の文字化け
うじゅさん、ひろゆきさん、
度々のご返信、本当にありがとうございます。
先ず、ひろゆきさんのご指摘ですが、全角と半角交じりの文章を投稿するときの私の単純なタイポミスです。PHP上では、半角で記載してますので、EUC-JP、Shift_JISと記載してます。混乱させてしまい、大変、申し訳ありませんでした。

うじゅさん、サンプルの提供ありがとうございました。うじゅさんのサンプルを、LaCoocanにアップして、見てみましたが、文字化けせずに、きちんと見えます!!!

この辺を糸口に、もう一度、トライしてみようと思います。

ここまで、お付き合い頂き、お二人には、本当に感謝しております。ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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