プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
mPDF、エラー「HTML contains invalid UTF-8 character(s)」に対処する
結論から書くと

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」でPDF化する内容を前のページから渡してPDF化しています。

これをそのまま別のサーバに持っていったら、なんと!

HTML contains invalid UTF-8 character(s)

とかいうエラーが出やがりました。

見た目はこんな感じですφ(--)

20140624-01.png


別のサーバでは動いてたのになぁ、環境依存かよ(-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");

?>

mPDFのインスタンスをnewした後に「$pdf->ignore_invalid_utf8 = true;」を追加しています。
そしたら無事にPDFが出力されました\(--)/

……のは良いのですが、出力されたPDFがこんなんでしてねφ(--)

20140624-02.png


文字化けしてんじゃん!Σ(´・д・`)

その後あれこれと試行錯誤したのですが、結局渡ってきたパラメータを
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」を出力前に改めて「mb_convert_encoding()」で変換しました。
変換前から「UTF-8」だったはずなんですけどねっ(-。-)ぼそっ

いまいち腑に落ちませんが、取りあえず動いたので良しとしています。
個人的には納得がいきませんが、正体不明の文字化けが起きたら、
改めてエンコードしてやるのも一つの手なのかもしれません。

ってなところで、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:mPDF  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト