• 締切済み

文字化け

下記ソースの商品の部分が 文字化けします。 何か改善策ないでしょうか? <?php require_once('mbfpdf.php'); $GLOBALS['EUC2SJIS']=true; $pdf=new MBFPDF(); $pdf->AddMBFont(PMINCHO,'SJIS'); $pdf->Open(); $pdf->AddPage(); $pdf->SetFont(PMINCHO,'',14); $pdf->Cell(30,10,"商品",1,1,'C'); $pdf->Cell(30,10,$_POST['syouhin'],1,0,'C'); $pdf->Cell(30,10,$_POST['conto'],1,0,'C'); $pdf->Cell(30,10,$_POST['thank'],1,1,'C'); $pdf->Cell(30,10,$_POST['xyz'],1,0,'C'); $pdf->Cell(30,10,$_POST['opq'],1,0,'C'); $pdf->Cell(30,10,$_POST['stu'],1,0,'C'); $pdf->Output(); ?>

みんなの回答

  • public_sa
  • ベストアンサー率52% (13/25)
回答No.3

検証結果書いている間に質問に答えてもらった みたいで。。 ちょっと勘違いしてました。 ソースをEUC-JPで書いたって URLのパラメータで渡ってきたものは だめですね。 php.iniが触れるようでしたら、内部エンコードを (mb_internal_encodingだったっけな? ) EUC-JPに変換して渡してやる必要があるのでしょうかね。 (確かurlのパラメータが内部エンコードと同じコードで帰ってくると思いました。) それかパラメータをmb_convert_encoding($txt,"EUC-JP" , "内部エンコード")してやるか たしか文字コードはmb_detect_encoding()確認できると思いました。 渡ってくるパラメータの文字コードを一度確かめて パラメータの文字コード == mbfpdfへ渡せられる文字コード(日本語EUC) を同じにして、頑張ってください。 単なる文字化けのようですので、文字化けなんぞ 文字コードのつじつまさえ合えばなくなります。

deepsky
質問者

お礼

ありがとうございました。 php.iniの中の環境を 色々といじっていたら上手くできました。 mbstring.internal_encoding=EUC-JP mbstring.http_input=auto mbstring.http_output=Shift_JIS mbstring.detect_order=auto mbstring.substitute_character=none mbstring.script_encoding=Shift_JIS みたいな感じです。

すると、全ての回答が全文表示されます。
  • public_sa
  • ベストアンサー率52% (13/25)
回答No.2

#1です度々失礼します。 FPDF Ver1.53とMPFPDF Ver1.0 にて検証してみました。 ちなみにPHPのバージョンは5.2.3 下記、バージョンに限らずとは思うのですが。 mbfpdf.php#L189にて if ($EUC2SJIS && function_exists('mb_convert_encoding')) { $txt = mb_convert_encoding($txt,"SJIS","EUC-JP"); } と EUC2SJISがtrueでmb_convert_encoding()関数が使用出来る 環境なら 内部エンコードをEUC-JPからSJISに変えて文字を扱っているようです。 当然ですがUTF-8やSJIS等でソース書いて実行したら文字化けや PDFとしてすら認識しない状況になりました。 ・EUC-JPでソース書くとか、 ・自前でEUC-JPにエンコードしておいてmbfpdfへ渡してあげるとか ・EUC2SJISをfalseにしておいて、自前で文字をSJISにエンコードしてあげるとか ・mbfpdf.php#L190を自前の環境に書き換えるとか 別の方法でも対応できると思いますが、 後者2つは他の部分にも影響があるかもしれないので 更なる検証も必要となりますし、お勧めできませんが、 ちなみにPDF出力できたコード示します #パラメータがわからなかったのでパラメータ部分直書きしたのと #requireのところくらいしかさわってませんのでほぼ同じですが。。 <?php define("SEP", DIRECTORY_SEPARATOR); require_once(dirname(__FILE__) . SEP . "fpdf". SEP . "mbfpdf.php"); $GLOBALS['EUC2SJIS'] = true; $pdf=new MBFPDF(); $pdf->AddMBFont(PMINCHO,'SJIS'); $pdf->Open(); $pdf->AddPage(); $pdf->SetFont(PMINCHO,'',14); $pdf->Cell(30,10,"商品",1,1,'C'); $pdf->Cell(30,10,"商品",1,0,'C'); $pdf->Cell(30,10,"商品",1,0,'C'); $pdf->Cell(30,10,"商品",1,1,'C'); $pdf->Cell(30,10,"商品",1,0,'C'); $pdf->Cell(30,10,"商品",1,0,'C'); $pdf->Cell(30,10,"商品",1,0,'C'); $pdf->Output(); ?>

すると、全ての回答が全文表示されます。
  • public_sa
  • ベストアンサー率52% (13/25)
回答No.1

御久しぶりです。前回回答させて頂いた者です。 前回書いた通り自身FPDFは使用したことが無かったのですが この質問を見て入れてみました。 さて、本題ですが、サンプルのファイルexja.php はきちんと表示されますか? あなたのコードをしようさせてもらいましたが、 文字化けというかPDFファイルとして認識されず 表示されている状況でしょうか? それとも本当に単なる文字化けでしょうか? php.iniは設定可能な環境ですか? 幾つか逆に質問してしまいましたが、出来る限り 多くの情報をお願いします。 面白そうなので私ももう少し追及してみます。

deepsky
質問者

お礼

ご連絡ありがとうございます。 ご質問にお答えします。 サンプルのファイルexja.phpは表示します。 PDFファイルとして認識しています。 php.iniは設定可能な環境です。 文字化けは、「?i」と表示されます。

すると、全ての回答が全文表示されます。

関連するQ&A