2014.
06.
24
21:14:13
結論から書くと
1.mPDFをnewしたあとに「ignore_invalid_utf8 = true;」を付けてやる
2.PDF化する出力内容をエンコードする
で解決しました。
それでは詳細を書いていきます。
mPDFを使って、HTMLをPDF化するプログラムを以前作りましてね。
サンプル
それをちょっくら別のサーバに持って行ったのです。
ちなみに、元々のコードはこんなんねφ(--)
パラメータ「input_data」でPDF化する内容を前のページから渡してPDF化しています。
これをそのまま別のサーバに持っていったら、なんと!
とかいうエラーが出やがりました。
見た目はこんな感じですφ(--)

別のサーバでは動いてたのになぁ、環境依存かよ(-A-)
めんどっちーなーと思いながらGoogle先生にお伺いを立てたところ、
「ignore_invalid_utf8」を「true」にせい!とのお告げを得ました。
早速こんな感じに改造φ(--)
mPDFのインスタンスをnewした後に「$pdf->ignore_invalid_utf8 = true;」を追加しています。
そしたら無事にPDFが出力されました\(--)/
……のは良いのですが、出力されたPDFがこんなんでしてねφ(--)

文字化けしてんじゃん!Σ(´・д・`)
その後あれこれと試行錯誤したのですが、結局渡ってきたパラメータを
UTF-8にエンコードしたら綺麗に出力されるようになりました。
コードとしてはこんな感じφ(--)
「$input_data」を出力前に改めて「mb_convert_encoding()」で変換しました。
変換前から「UTF-8」だったはずなんですけどねっ(-。-)ぼそっ
いまいち腑に落ちませんが、取りあえず動いたので良しとしています。
個人的には納得がいきませんが、正体不明の文字化けが起きたら、
改めてエンコードしてやるのも一つの手なのかもしれません。
ってなところで、完了\(--)/
1.mPDFをnewしたあとに「ignore_invalid_utf8 = true;」を付けてやる
$pdf->ignore_invalid_utf8 = true;
2.PDF化する出力内容をエンコードする
$input_data = mb_convert_encoding($input_data,"UTF-8","auto");
で解決しました。
それでは詳細を書いていきます。
mPDFを使って、HTMLをPDF化するプログラムを以前作りましてね。
サンプル
それをちょっくら別のサーバに持って行ったのです。
ちなみに、元々のコードはこんなんねφ(--)
<?php
//------------------------------------
// パラメータ受け取り
//------------------------------------
$input_data = $_POST{'input_data'}; //PDF化する内容
//------------------------------------
// mPDFのインスタンス生成
//------------------------------------
require_once(dirname(__FILE__) . "./../mpdf/mpdf.php"); // mpdfモジュール読み込み
$pdf = new mPDF('ja',"A4");
//------------------------------------
// PDF出力
//------------------------------------
$pdf->WriteHTML($input_data);
$pdf->Output("test.pdf", "D");
?>
//------------------------------------
// パラメータ受け取り
//------------------------------------
$input_data = $_POST{'input_data'}; //PDF化する内容
//------------------------------------
// mPDFのインスタンス生成
//------------------------------------
require_once(dirname(__FILE__) . "./../mpdf/mpdf.php"); // mpdfモジュール読み込み
$pdf = new mPDF('ja',"A4");
//------------------------------------
// PDF出力
//------------------------------------
$pdf->WriteHTML($input_data);
$pdf->Output("test.pdf", "D");
?>
パラメータ「input_data」でPDF化する内容を前のページから渡してPDF化しています。
これをそのまま別のサーバに持っていったら、なんと!
HTML contains invalid UTF-8 character(s)
とかいうエラーが出やがりました。
見た目はこんな感じですφ(--)

別のサーバでは動いてたのになぁ、環境依存かよ(-A-)
めんどっちーなーと思いながらGoogle先生にお伺いを立てたところ、
「ignore_invalid_utf8」を「true」にせい!とのお告げを得ました。
早速こんな感じに改造φ(--)
<?php
//------------------------------------
// パラメータ受け取り
//------------------------------------
$input_data = $_POST{'input_data'}; //PDF化する内容
//------------------------------------
// mPDFのインスタンス生成
//------------------------------------
require_once(dirname(__FILE__) . "./../mpdf/mpdf.php"); // mpdfモジュール読み込み
$pdf = new mPDF('ja',"A4");
$pdf->ignore_invalid_utf8 = true;
//------------------------------------
// PDF出力
//------------------------------------
$pdf->WriteHTML($input_data);
$pdf->Output("test.pdf", "D");
?>
//------------------------------------
// パラメータ受け取り
//------------------------------------
$input_data = $_POST{'input_data'}; //PDF化する内容
//------------------------------------
// mPDFのインスタンス生成
//------------------------------------
require_once(dirname(__FILE__) . "./../mpdf/mpdf.php"); // mpdfモジュール読み込み
$pdf = new mPDF('ja',"A4");
$pdf->ignore_invalid_utf8 = true;
//------------------------------------
// PDF出力
//------------------------------------
$pdf->WriteHTML($input_data);
$pdf->Output("test.pdf", "D");
?>
mPDFのインスタンスをnewした後に「$pdf->ignore_invalid_utf8 = true;」を追加しています。
そしたら無事にPDFが出力されました\(--)/
……のは良いのですが、出力されたPDFがこんなんでしてねφ(--)

文字化けしてんじゃん!Σ(´・д・`)
その後あれこれと試行錯誤したのですが、結局渡ってきたパラメータを
UTF-8にエンコードしたら綺麗に出力されるようになりました。
コードとしてはこんな感じφ(--)
<?php
//------------------------------------
// パラメータ受け取り
//------------------------------------
$input_data = $_POST{'input_data'}; //PDF化する内容
//------------------------------------
// mPDFのインスタンス生成
//------------------------------------
require_once(dirname(__FILE__) . "./../mpdf/mpdf.php"); // mpdfモジュール読み込み
$pdf = new mPDF('ja',"A4");
$pdf->ignore_invalid_utf8 = true;
//------------------------------------
// PDF出力
//------------------------------------
$input_data = mb_convert_encoding($input_data,"UTF-8","auto");
$pdf->WriteHTML($input_data);
$pdf->Output("test.pdf", "D");
?>
//------------------------------------
// パラメータ受け取り
//------------------------------------
$input_data = $_POST{'input_data'}; //PDF化する内容
//------------------------------------
// mPDFのインスタンス生成
//------------------------------------
require_once(dirname(__FILE__) . "./../mpdf/mpdf.php"); // mpdfモジュール読み込み
$pdf = new mPDF('ja',"A4");
$pdf->ignore_invalid_utf8 = true;
//------------------------------------
// PDF出力
//------------------------------------
$input_data = mb_convert_encoding($input_data,"UTF-8","auto");
$pdf->WriteHTML($input_data);
$pdf->Output("test.pdf", "D");
?>
「$input_data」を出力前に改めて「mb_convert_encoding()」で変換しました。
変換前から「UTF-8」だったはずなんですけどねっ(-。-)ぼそっ
いまいち腑に落ちませんが、取りあえず動いたので良しとしています。
個人的には納得がいきませんが、正体不明の文字化けが起きたら、
改めてエンコードしてやるのも一つの手なのかもしれません。
ってなところで、完了\(--)/