プロが教えるわが家の防犯対策術!

フォームから送信されたShift-jisの文字列をUTF-8に変換して、ImageTTFText関数を使用して画像として表示させようとしているのですが、文字化けをしてしまって困っています。
入出力はShift-jisで、内部処理はUTF-8で行いたくて色々実験してみたのですが、どうにもうまくいきません。
以下にソース・環境を載せますので、どなたか、間違いをご指摘いただけないでしょうか?
なるべくPHP.iniの設定は変えないで対処したいです。
どうか、よろしくお願いいたします。

【サーバのPHP.iniの設定(PHP ver.4.3.9)】
mbstring.detect_order = auto
mbstring.encoding_translation = off
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.internal_encoding = EUC-JP
mbstring.language = Japanese

【使用しているソース】
<?php
mb_language("ja");
mb_internal_encoding("UTF-8");
mb_http_input("SJIS");
mb_http_output("SJIS");

// 表示する文字列
$str = mb_convert_encoding($_GET["txt"], "UTF-8", "SJIS");

// 画像サイズ
define ( IMGWID, 300 );
define ( IMGHEI, 300 );

// フォントサイズ
define ( FONTSIZE, 20 );

// 文字のスタート位置
define ( START_X, 10 );
define ( START_Y, 50 );

// 生成画像
$img = imagecreatetruecolor ( IMGWID, IMGHEI );

// フォント色
$fntc = ImageColorAllocate ( $img, 255, 255, 255 );

// 使用するフォント
define ( FONTTYPE, '../font/DFKaiE.ttf' );

// フォントパスの設定
putenv ( 'GDFONTPATH='.realpath('.') );

$x = START_X;
$y = START_Y;
// 入力された文字を書き出し
ImageTTFText ( $img, FONTSIZE, 0, $x, $y , $fntc, FONTTYPE, $str );

header ( "Content-type: image/jpeg" );
ImageJpeg ( $img );
ImageDestroy ( $img );
?>

A 回答 (2件)

>mbstring.internal_encoding = EUC-JP


これだと画像を作る時の、fontの文字コード体系はEUC-JPになるんじゃないんですか?

以下の関数あたりで、fontの文字コード体系を変更できそう?
bool imagepsencodefont ( resource font_index, string encodingfile )
http://php.s3.to/man/function.imagepsencodefont. …

ps.default_encoding も確認した方がよいのかな

参考URL:http://php.s3.to/man/function.imagepsencodefont. …

この回答への補足

書き込みありがとうございます!

imagepsencodefont ( "UTF-8" );
とプログラムの最初に入力してみたのですが、うまくいきません。
マニュアルの方には例文のようなものがなかったので、使い方がいまいち分からなかったのですが、この関数はどういった指定をすればよろしいのでしょうか?

初歩的な質問になってしまい、申し訳ございません…。

補足日時:2007/01/30 10:35
    • good
    • 0

表示された画像が文字化けするのでしょうか?


内部処理はUTF-8で行い、画像の表示だけSJISに戻してから
再度UTF-8に変換して内部処理を続けるという方法ではどうでしょうか
アドバイス程度ですいません

この回答への補足

書き込みありがとうございます!
表示された画像が文字化けしてしまうんです。
たとえば『あ』と入力すると『、「』という文字に変わってしまいます。

画像の表示だけSJISに戻すというのは、具体的にはどのタイミングで、どういったことをするのでしょうか???

かすかな期待を込めて
ImageJpeg ( $img );の前に
$img = mb_convert_encoding($img , "SJIS", "UTF-8");
を挿入してみたんですが、画像が表示されなくなりました…(^_^;)

補足日時:2007/01/26 15:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!