- 締切済み
文字化け(Shift-jis→UTF-8変換)で困ってます。
フォームから送信された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 ); ?>
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hrm_mmm
- ベストアンサー率63% (292/459)
>mbstring.internal_encoding = EUC-JP これだと画像を作る時の、fontの文字コード体系はEUC-JPになるんじゃないんですか? 以下の関数あたりで、fontの文字コード体系を変更できそう? bool imagepsencodefont ( resource font_index, string encodingfile ) http://php.s3.to/man/function.imagepsencodefont.html ps.default_encoding も確認した方がよいのかな
- 2panda
- ベストアンサー率57% (4/7)
表示された画像が文字化けするのでしょうか? 内部処理はUTF-8で行い、画像の表示だけSJISに戻してから 再度UTF-8に変換して内部処理を続けるという方法ではどうでしょうか アドバイス程度ですいません
補足
書き込みありがとうございます! 表示された画像が文字化けしてしまうんです。 たとえば『あ』と入力すると『、「』という文字に変わってしまいます。 画像の表示だけSJISに戻すというのは、具体的にはどのタイミングで、どういったことをするのでしょうか??? かすかな期待を込めて ImageJpeg ( $img );の前に $img = mb_convert_encoding($img , "SJIS", "UTF-8"); を挿入してみたんですが、画像が表示されなくなりました…(^_^;)
補足
書き込みありがとうございます! imagepsencodefont ( "UTF-8" ); とプログラムの最初に入力してみたのですが、うまくいきません。 マニュアルの方には例文のようなものがなかったので、使い方がいまいち分からなかったのですが、この関数はどういった指定をすればよろしいのでしょうか? 初歩的な質問になってしまい、申し訳ございません…。