[PHP-users 35553] 解決しました。

ram ram @ hatsuho.co.jp
2011年 4月 22日 (金) 12:48:17 JST


豊丹生さん 度々のコメント有難うございました。

>Mysqlに格納されている日本語の文字コードを再度確認するか

データベースはutf-8ですが、テーブルはsjisになっていました。
インポートした時点で勝手に変換されると思い込んでいました。

後はご指摘の通り、エンコードをしたところ、
日本語が無事表示されるようになりました。

foreach ($datax as &$value) {
  $value=mb_convert_encoding(str_replace('〜', '~', $value), "UTF-8", "SJIS"); 
}

大変助かりました。まだまだ勉強不足なことを痛感しました。
どうも有難うございました。


(2011/04/22 9:54), Michiyoshi Buniu(DreamLink) wrote:
 

> 豊丹生です。
>
> 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 @ php.gr.jp
>> [mailto:php-users-bounces @ php.gr.jp] 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 @ php.gr.jp
>>>> [mailto:php-users-bounces @ php.gr.jp] 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 @ php.gr.jp
>>>> http://ml.php.gr.jp/mailman/listinfo/php-users
>>>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>>>> http://oldwww.php.gr.jp/php/novice.php3
>>> _______________________________________________
>>> PHP-users mailing list  PHP-users @ php.gr.jp
>>> http://ml.php.gr.jp/mailman/listinfo/php-users
>>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>>> http://oldwww.php.gr.jp/php/novice.php3
>>>
>> _______________________________________________
>> PHP-users mailing list  PHP-users @ php.gr.jp
>> http://ml.php.gr.jp/mailman/listinfo/php-users
>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>> http://oldwww.php.gr.jp/php/novice.php3
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>



PHP-users メーリングリストの案内