バグ報告 > 管理機能 > 【2.11.4】商品登録CSVでシステムエラーが発生 |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
casa |
投稿日時: 2012/3/2 16:55
対応状況: −−−
|
長老 登録日: 2011/10/3 居住地: 投稿: 210 |
【2.11.4】商品登録CSVでシステムエラーが発生 お世話になります。
バグというわけではないと思うのですが、同事象に困っている方もいるかもしれないと思い、こちらに投稿させて頂きます。 以下の環境で商品登録CSVアップロード時にシステムエラーが発生しました。 ---------------------- EC-CUBE: 2.11.4 DB: PostgreSQL(EUC-JP) ※DBはEUC-JP以外利用不可 ---------------------- CSVファイルをShift-JIS形式でアップロードしたときにエラーが発生し、UTF-8形式でアップロードすると正常に処理されました。 データに「〜」を含む場合に発生しました。 今回の場合、以下のように文字コードが変換されていきます。 1.CSVアップロード時にEC-CUBEでShift-JISからUTF-8に変換 2.DB登録時にMDB2内でUTF-8からEUC-JPに変換 原因は、上記1の変換時の「〜」等の扱いに問題があることだと思います。 Shift-JISのCSVをアップロードすると、1で「〜」が通常とは異なる字体の「〜」に変換されてしまいます。 DBがUTF-8の場合はそれでも登録はうまくいきますが、EUC-JPの場合、その文字に該当する文字がないため、 DB登録が失敗してシステムエラーとなります。 DBがUTF-8の場合でも、本来意図した字体ではないのが気になりました。 今回はSC_Utils.php:894行目(sfEncodeFile()内)を以下のように修正して対応しました。 - $line = mb_convert_encoding($line, $enc_type, 'auto'); + $line = mb_convert_encoding($line, $enc_type, 'ASCII,JIS,UTF-8,eucjp-win,sjis-win,EUC-JP,SJIS'); http://php.net/manual/ja/function.mb-convert-encoding.php によると、 「"auto" は、"ASCII,JIS,UTF-8,EUC-JP,SJIS" に展開される」 とのことだったので、EUC-JP、SJISそれぞれよりも先にWindows拡張用のコードを指定しています。 パラメータ設定のCHAR_CODEの値を"UTF-8"から"EUC-JP"に変更すればよいとも思ったのですが、 そうするとSC_Initial.phpでmbstring系の設定値も全てEUCに変わってしまうようなのでこれは実施しませんでした。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |