
お役立ち記事・ブログ
EC-CUBEバージョン:2.13.5
PHPバージョン:7.2.12
DBバージョン:MySQL 5.5.60-MariaDB
CentOSバージョン:7.5
の環境で商品登録CSVを行った際、「尺」「借」のようなSJISで文字コードの1バイト目や2バイト目が8Eとなる文字が入っている場合、他の文字や改行コードとの組み合わせによって文字化けしていました。
もしかすると、環境によるのかもしれませんが、どうも /data/class/util/SC_Utils.php の sfEncodeFile関数で、
1 |
$line = mb_convert_encoding($line, $enc_type, 'auto'); |
と mb_convert_encoding に「auto」を指定しているとうまく変換できないようですので、/data/class_extends/util_extends/SC_Utils_Ex.php に、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public static function sfEncodeFile($filepath, $enc_type, $out_dir) { $ifp = fopen($filepath, 'r'); // 正常にファイルオープンした場合 if ($ifp !== false) { $basename = basename($filepath); $outpath = $out_dir . 'enc_' . $basename; $ofp = fopen($outpath, 'w+'); while (!feof($ifp)) { $line = fgets($ifp); //「auto」を「UTF-8,SJIS-win,eucJP-win,ASCII,JIS」に変更 //$line = mb_convert_encoding($line, $enc_type, 'auto'); $line = mb_convert_encoding($line, $enc_type, 'UTF-8,SJIS-win,eucJP-win,ASCII,JIS'); fwrite($ofp, $line); } fclose($ofp); fclose($ifp); // ファイルが開けなかった場合はエラーページを表示 } else { SC_Utils_Ex::sfDispError(''); exit; } return $outpath; } |
と「auto」を「UTF-8,SJIS-win,eucJP-win,ASCII,JIS」に置き換えたソースを追加することで回避しました。
#/data/class/util/SC_Utils.php を直接修正しても同じです。
ただ、/data/class/SC_Initial.php で
1 |
mb_detect_order(array('UTF-8', 'SJIS-win', 'eucJP-win')); |
と指定しているのに挙動が異なるのは、不思議ですね。
ホームページ・ポータルサイト制作、起業支援に関することはお気軽にご相談・お問い合わせください
TEL:050-3152-1848
電話受付時間:平日9:30~18:30
メールでのお問い合わせは24時間受付OK!(無料)
メール受付はコチラ