AS400/IBMi Laravel-Excelで文字化けするので文字コードを変換する

IT関連

Laravel-Excelというのを見つけたので使ってみたのだが、いかんせんAS400だと色々と面倒くさい。

 

AS400はEBCDICという文字コードらしく、そこからODBCかPDOで引っ張ってきても、Shift-JISにしかならない。

 

一気にEBCDIC->UTF-8にすることはできない。とはいえ、ODBCで引っ張った時点でShift-JISになっている訳だから、それを変換してあげればいい。

 

$hensu = trim(mb_convert_encoding($hensu,’UTF-8′,’SJIS-win’));

 

それはいいのだが、これをどこに放り込むか。

 

ファイルはこれ、vender/phpoffice/phpexcel/Classes/PHPExcel/Cell/DefaultValueBinder.php

 

ここの5行目の前に入れてあげる。

 public function bindValue(PHPExcel_Cell $cell, $value = null)
    {
        // sanitize UTF-8 strings
        if (is_string($value)) {
            $value = PHPExcel_Shared_String::SanitizeUTF8($value);
        } elseif (is_object($value)) {
            // Handle any objects that might be injected
            if ($value instanceof DateTime) {
                $value = $value->format('Y-m-d H:i:s');
            } elseif (!($value instanceof PHPExcel_RichText)) {
                $value = (string) $value;
            }
        }

        // Set value explicit
        $cell->setValueExplicit( $value, self::dataTypeForValue($value) );

        // Done!
        return true;
    }

 

こんな感じで。

 

 if (is_string($value)) {
            //2バイト文字の文字化けを直す 2018/8/3 K.H
            $value = trim(mb_convert_encoding($value,'UTF-8','SJIS-win'));
            $value = PHPExcel_Shared_String::SanitizeUTF8($value);
        } elseif (is_object($value)) {

 

これでOKみたい。今のところ問題は起きていない。

コメント

タイトルとURLをコピーしました