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みたい。今のところ問題は起きていない。
コメント