ログのグラフタイトル が化ける

ログのグラフタイトル が化ける

- Takahiro Kagoya の投稿
返信数: 9
利用者のプロフィールから、活動報告->今日のログ あるいは、全てのログを表示すると、グラフが表示されますが、その上のタイトルが化けます。localeの影響があるのでしょうか。
Takahiro Kagoya への返信

Re: ログのグラフタイトル が化ける

- Ryoichi Nakayama の投稿
私のところ(Linux+apache)でも、同様です。phpとGDに関する設定かと思ってもいますが、graphlib.phpを見ると、/lang/ja/fontsを見るようになっているようです。multibyteではlang-decodeも必要なようですが、設定がわかりません。フォントpathはシステム(linuxだとディストリビューションによっても)変わるでしょう。旨く設定できている人がいたら私も情報が欲しいです。
Takahiro Kagoya への返信

Re: ログのグラフタイトル が化ける

- Takahito Kashiwagi の投稿

すでに記載から数ヶ月が経過しているようですので、必要ないかもしれませんが。

当方環境(Windows 2K + Apache 1.3.31 + PHP 4.3.8 + Moodle 1.3.4 + GD 2.x)という限られた環境での検証しかしていませんが、以下の手を加える事でGDにて日本語表示を行えるようにしました。恐らく他の環境でも似た様な改変で日本語対応が可能ではないかと思います。

1.../lib/graphlib.phpに手を加える。
2.Moodle内の../lang/ja/内にfontsフォルダを作成。
3.fontsフォルダ内に適当なTTFを設置。

詳しくは(http://www.supertak.com/down/sample.htm)に記載しておきました。まだGDの文字化けにお困りでしたら参考になれば幸いです。

Takahito Kashiwagi への返信

Re: ログのグラフタイトル が化ける

- Takahiro Kagoya の投稿

はじめまして。

参考にさせていただき、WinXPHome+Apache2.0.47+PHP4.3.3 + Moodle 1.5 development 2004082300 +GD2 で確認しましたが、日本語部分が文字化けします。これまでは、日本語部分は四角だったので、表示しようとしているとおもわれますが... 

それで、GD2の日本語表示に問題があるのではと思い、Webで見つけた以下のプログラムを実行してみました。(ファイル自体の文字コードはEUC-JPや、SJISで試しました)

<?php
Header("Content-type: image/png");
$im = imagecreate(400,30);
$black = ImageColorAllocate($im,0,0,0);
$white = ImageColorAllocate($im,255,255,255);
$txt = "Test kanji 漢字";
$txt = mb_convert_encoding($txt,"utf-8","euc-jp");
ImageTTFText($im,20,0,10,20,$white,"C:\WINDOWS\Fonts\MSGOTHIC.TTC",$txt);
ImagePng($im);
ImageDestroy($im);
?>

結果、これも正しく動作しません。"漢字"の部分が文字化けします。・で表示されたり、関係ない特殊文字が出たりします。
mb_convert_encodingの引数をいろいろ変えても見たのですが、化け方は変わるものの、正しく表示はされません。

php.iniでは、mb関係はEUC-JPに統一してあります。

ところで、今回の件と直接関係ないかもしれませんが、Win2kでの運用とうことで、localeは何を指定されていますか。当方は、Japanese_Japan.20932というのを指定しています。別のスレッドに書いたように、これを指定して、なおかつ、setlocaleまわりを変更してやっと日付関係が化けずに表示されます。参考にさせていただきたいので、おしえていただけますか?

Takahiro Kagoya への返信

Re: ログのグラフタイトル が化ける

- Takahito Kashiwagi の投稿

KAGOさんはじめまして。

当方は、php.iniのmbの設定も少々変わってます。

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;

として、input / output にはpassを指定しコード変更してません。

また、Apacheも1.3系なので、2.0系と異なり、
AddDefaultCharset設定をしていません。

localeには、ja_JP.EUC を指定しています。
このためか、日付関係は曜日だけが英語表記です。
通常に日付表示に文字化けはありませんが、
カレンダーボックスの日付だけが少々変です。

------------------------

<?php
Header("Content-type: image/png");
$im = imagecreate(400,30);
$black = ImageColorAllocate($im,0,0,0);
$white = ImageColorAllocate($im,255,255,255);
$txt = "Test kanji 漢字";
$txt = mb_convert_encoding($txt,"utf-8","euc-jp");
ImageTTFText($im,20,0,10,20,$white,"C:\WINNT\Fonts\MSGOTHIC.TTC",$txt);
ImagePng($im);
ImageDestroy($im);
?>

上記を、
http://www.supertak.com/down/test.php
に設置しましたが、問題なく動作するようです。
※..\WINDOWS\ を、当方の環境にあわせ..\WINNT\ にしてます。
※PHPとGDのバージョンによっては、TTFがつかえずに、
※OpenTypeFontのみ使えるとの情報もありました。

> 表示しようとしているとおもわれますが...
とのことですので、FONTを別のものに
変更すると解決するかもしれません。

Moodleはまだ仮設置の段階ですが、
http://moodle.supertak.com/
に構築中です。
現在テスト中ですのでいろいろ試していますが、
特に文字化けは発生していません。

GDのみ文字化けが発生していましたが、
先述の変更によって解消しております。

localeをJapanese_Japan.20932などに変更すると、
確かにGDの日本語表示の挙動が少し変わりますね。
※具体的には全角文字化けは発生しませんが、
※活動グラフX軸にあるAM/PMが表示されなくなりました。
※現在でも90度ローテート設定してるので表示が変ですけど。

当方の残りの悩みはカレンダーボックスの日時です。

Takahito Kashiwagi への返信

Re: ログのグラフタイトル が化ける

- Takahito Kashiwagi の投稿

と記載しつついろいろいじっていたらカレンダーも解決です。
../lang/ja/moodle.phpの
$string['strftimemonthyear'] = '%%Y年 %%m月';
の値の月の後ろに半角スペースを足しました。
$string['strftimemonthyear'] = '%%Y年 %%m月 ';

<2004年8月 (文字化け)>となっていたので、
PHP処理時にコードが続けて記載される事が原因ではないかと考え、
変数自体の終わりにスペースを入れるという強硬手段で解決です。

Takahiro Kagoya への返信

Re: ログのグラフタイトル が化ける

- Takahito Kashiwagi の投稿

その後さらに、曜日だけ日本語ではないのもしっくりこないので、KAGOさんの情報を元にLocaleをJapanese_Japan.20932にしました。

----------------------------------

  1. localeに、Japanese_Japan.20932と指定する。
  2. moodle/lib/setup.php の235行付近の setlocale(LC_TIME,$cfg->locale)の前に、setlocale(LC_ALL,$cfg->locale)を入れる。

-----------------------------------

変更箇所は当方の環境(Moodle 1.3.4)では、上記で指示のあるsetup.php内の235行目ではなく、moodlelib.phpの2320行目付近です。ここに・・・、

    setlocale (LC_ALL, $CFG->locale); ←
    setlocale (LC_TIME, $CFG->locale);
    setlocale (LC_COLLATE, $CFG->locale);

とLC_ALLを追加しました。
この変更により、日付の曜日も日本語になりました。またGDですがこちらも良好です。とはいえ、各軸のアライメントが日本語表記とは合わないのでギコチナク表示されてますが・・・。ともかく、Windows OS環境で全ての日本語表記が正しくなりました。

http://moodle.supertak.com

Takahiro Kagoya への返信

Re: ログのグラフタイトル が化ける

- Takahito Kashiwagi の投稿

Moodle 1.5 dev環境でも同じような設定でGD2文字化けと日付表示化けを解消しました。
http://www.supertak.com/down/sample2.htm
に変更した内容をまとめてあります。

今回はSYSTEM内のMSゴシックを利用するようにしてみました。
また、1.5 dev ではMETAの設定が当方環境ではうまく設定されませんでしたので、weblib.phpを改変し、強制的にcharset=euc-jpにしています。

Takahito Kashiwagi への返信

Re: ログのグラフタイトル が化ける

- Takahiro Kagoya の投稿

詳しい説明で、大変助かりました。まず、php.iniのmbstring関係の設定をKashiwagiさんと同じにしてみましたが、状況は変わりませんでした。それで、phpのバージョンを4.3.8に上げたところ、問題なく表示されました。GD2の細かいバージョンによる問題...ということでしょうかね。php.ini内のmbstring関係の設定を戻しても、影響はなさそうです。

運用マシンはWin2kServer+IISなので、後日動作確認をしてみます。

graphlib.phpの変更を本家CVSに反映して頂きたいですね。ただ、mbstringを使っているのと、Winのパスの問題があるので、調整が必要だと思いますが。

setlocaleの件ですが、以前のバージョンでは、setup.php内でしたが、最近になって、関数にまとめて、moodlelib.phpにてsetlocaleするようになったようです。
それと、確かにグラフのX軸に日本語の日時表示がされるようになったのですが、縦書きになってしまい、文字順が逆になってしまいますね。(”午前12” が ”前午21”(縦書き))

それと、METAの設定...ですが、php自体のdefault_charsetを変えないと、IEがエンコードを西ヨーロッパ(Windows)と誤認識してしまう...という症状とは関係ないでしょうか。(以前別スレッドで書きました)

Takahiro Kagoya への返信

Re: ログのグラフタイトル が化ける

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
ギリシャ語(lang/el)と同じようにfontsフォルダ内にmb_convert_encoding関数を入れたlang_decode.phpを置いても良さそうですね。

http://moodle.org/mod/forum/discuss.php?d=7428 でも議論されている通り、フォントの再配布が問題になってくると思います。