2011年4月22日

[PHP-users 35552] Re:タイトルでなくデータをMysqlから取得すると化けるようです

豊丹生です。

DBから取得して、表示するところまでのスクリプトがあれば
もう少し詳しくお答えできるかもなのですが、
DBから取得する値を日本語ではなく、
英語にして試してみると良いのではないでしょうか。

それでうまく表示されれば確実に文字コードの問題なので、

Mysqlに格納されている日本語の文字コードを再度確認するか
文字コード変換部分のロジックを確認する必要がありそうです。
(DBがUTF-8で作られていても
EUC-JPで値が格納されているなどの可能性もあります。)

抜粋されてるので違うかもしれないですが、
以下のソースで気になるのは
このソースでは、$datax配列は何も変更されないということです。

> foreach( $datax as $jval ){
> $jval=mb_convert_encoding($jval, 'UTF-8', 'auto'); }

$datax配列そのものをコード変換する場合は以下のような感じです。

foreach( $datax as $key => $jval ){
$datax[$key]=mb_convert_encoding($jval, 'UTF-8', 'auto');
}


> -----Original Message-----
> From: php-users-bounces@xxxxx
> [mailto:php-users-bounces@xxxxx] On Behalf Of ram
> Sent: Friday, April 22, 2011 9:04 AM
> To: PHP-users ML
> Subject: [PHP-users 35551] タイトルでなくデータをMysqlから取得すると
> 化けるようです
>
> 豊丹生さん コメント有難うございました。
>
>
> >X軸のタイトルの場合は
> >$graph->xaxis->title->SetFont(FF_GOTHIC, FS_NORMAL, 10);
>
> ですが、これはX軸の見出しでリテラルで直接指定しており、正しく表示さ
> れて
> います。
>
> 表示されないのは、X軸に出す値そのものです。
> $graph->xaxis->SetFont(FF_GOTHIC,FS_NORMAL);
> がそれに当るようなので、値を直接下記のように記述すると正しく日本語表
> 示さ
> れます。
> (表示したいデータは半角+漢字なので同じ形にしてあります)
> $datax=array("1月","2月","3月","4月","5月","6月","7月","8月","9
> 月","10
> 月","11 月","12月");
> $graph->xaxis->SetTickLabels($datax);
> $graph->xaxis->SetFont(FF_GOTHIC,FS_NORMAL);
>
> $dataxの部分をMysqlから取得した配列を使うと化けてしまう訳です。
> ちなみに、配列の内容をダンプするため、スクリプトの先頭に
> print_r($datax);
> と入れると、正しく日本語表示されるので、データは格納されているようで
> す。
> foreach( $datax as $jval ){
> $jval=mb_convert_encoding($jval, 'UTF-8', 'auto'); }
> と強制的にutf-8にしても結果は同じでした。
>
> 棒グラフを横に回転させているので、その回転部分を外して通常の棒グラフ
> にし
> たり、
> //$graph->Set90AndMargin($left,$right,$top,$bottom);
> していますが、何が化けさせているのか、さっぱり判りません。
>
> 初穂 太郎
>
> (2011/04/21 20:04), Michiyoshi Buniu(DreamLink) wrote:
> > こんばんは。豊丹生と申します。
> >
> > 最近ちょうどJpGraphをやっていたので、
> > 同じ現象かと思いメールします。
> >
> > 全てにおいてそれぞれフォントが正しくセットされないと
> > 日本語はUTF-8にしていても文字化けするようです。
> >
> > タイトルの場合は
> >> $graph->title->SetFont(FF_GOTHIC,FS_NORMAL); // 日本語が出ました
> > ですが、
> >
> > X軸のタイトルの場合は
> > $graph->xaxis->title->SetFont(FF_GOTHIC, FS_NORMAL, 10);
> >
> > Y軸のタイトルの場合は
> > $graph->yaxis->title->SetFont(FF_GOTHIC, FS_NORMAL, 10);
> >
> > 凡例の場合は
> > $graph->legend->SetFont(FF_GOTHIC, FS_NORMAL);
> >
> > などです。
> >
> > 違ってたらすみません。参考になれば幸いです。
> >
> >
> >> -----Original Message-----
> >> From: php-users-bounces@xxxxx
> >> [mailto:php-users-bounces@xxxxx] On Behalf Of ram
> >> Sent: Thursday, April 21, 2011 5:34 PM
> >> To: PHP-users ML
> >> Subject: [PHP-users 35547] Jpgraphを使った日本語データの文字化け
> >>
> >> こんにちは。
> >> WindowsServerからAS400への認証は、皆様にヒントを頂いたおかげでな
> ん
> >> とかな
> >> りそうなので、
> >> 本題であるPHPでの作りこみにはいっています。
> >>
> >> サンプル等を参考にしながら、なんとかMysqlに接続して、JpGraphを使
> っ
> >> て
> >> グラフを出すところまでたどり着きました。
> >> サンプルに入っている groupbarex1.phpをそのまま使ってたので、
> >> セットする配列の値をmysqlでfetchした結果をセットするところを変更
> し
> >> ただけ
> >> なので、
> >> X軸要素以外は思うように表示されています。
> >>
> >> ここで判らないのが、日本語の文字化けです。
> >> php.iniの書き換えや、フォントの指定なので、タイトルは日本語に出す
> こ
> >> とが
> >> できましたが、
> >> $graph->title->Set('グラフを日本語化する');
> >> $graph->title->SetFont(FF_GOTHIC,FS_NORMAL); // 日本語が出ました
> >>
> >> X軸の要素となるMysqlから取得した日本語データがどうしても文字化け
> し
> >> てしま
> >> うのです。
> >> phpのソースもutf-8で保存してあります。
> >> mysqlのデータベースはutf-8で作成してあるため、そのまま表示できる
> と
> >> 思った
> >> のですが、
> >> わざわざエンコードもしてみましたが結果は同じです。
> >> $jval=mb_convert_encoding($jval, 'UTF-8', 'auto');
> >>
> >> mysqlのほうのメーリングリストに出すべきなのかもしれませんが、
> >> 解決策もしくはヒントを頂ければありがたいです。
> >> よろしくお願い致します。
> >>
> >> 初穂太郎
> >>
> >> <?php
> >> require_once ('jpgraph/jpgraph.php'); require_once
> >> ('jpgraph/jpgraph_bar.php');
> >>
> >> //配列 $dataxに mysqlで取得した日本語のX軸要素
> >> //配列 $datay1〜3に mysqlで取得した値が入っています
> >>  // sample groupbarex1.phpをそのまま使っているのでX軸要素以外は
> そ
> >> のまま
> >> 表示されています
> >>
> >> $graph = new Graph(450,400,'auto');
> >> $graph->SetScale("textlin");
> >> $graph->SetShadow();
> >> foreach( $datax as $jval ){
> >> $jval=mb_convert_encoding($jval, 'UTF-8', 'auto'); }
> >> $graph->xaxis->SetTickLabels($datax);
> >> $graph->xaxis->SetFont(FF_GOTHIC,FS_NORMAL); // 変更
> >>  $graph->title->Set('グラフを日本語化する');
> >>  $graph->title->SetFont(FF_GOTHIC,FS_NORMAL); // 日本語が出まし
> た
> >>  $bplot1 = new BarPlot($datay1);
> >>  $bplot2 = new BarPlot($datay2);
> >>  $bplot3 = new BarPlot($datay3);
> >>  $bplot1->SetFillColor("orange");
> >>  $bplot2->SetFillColor("brown");
> >>  $bplot3->SetFillColor("darkgreen");
> >>  $bplot1->SetShadow();
> >>  $bplot2->SetShadow();
> >>  $bplot3->SetShadow();
> >>  $bplot1->SetShadow();
> >>  $bplot2->SetShadow();
> >>  $bplot3->SetShadow();
> >>  $gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3));
> >>  $gbarplot->SetWidth(0.6);
> >>  $graph->Add($gbarplot);
> >>  $top = 80;
> >>  $bottom = 30;
> >>  $left = 50;
> >>  $right = 30;
> >>  $graph->Set90AndMargin($left,$right,$top,$bottom);
> >>  $graph->Stroke();
> >> ?>
> >>
> >> _______________________________________________
> >> PHP-users mailing list PHP-users@xxxxx
> >> http://ml.php.gr.jp/mailman/listinfo/php-users
> >> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> >> http://oldwww.php.gr.jp/php/novice.php3
> >
> > _______________________________________________
> > PHP-users mailing list PHP-users@xxxxx
> > http://ml.php.gr.jp/mailman/listinfo/php-users
> > PHP初心者のためのページ - 質問する前にはこちらをお読みください
> > http://oldwww.php.gr.jp/php/novice.php3
> >
>
> _______________________________________________
> PHP-users mailing list PHP-users@xxxxx
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3


_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2011年4月22日 09:54
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103407
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。