【EC-CUBE 2.13.5】特殊文字が含まれている受注情報をCSVダウンロードする方法

2017/01/07
  • EC-CUBE
【EC-CUBE 2.13.5】特殊文字が含まれている受注情報をCSVダウンロードする方法

管理画面の受注管理で検索した際には表示されている受注情報が、CSVダウンロードした際に受注情報が設定されていない事象が発生したので、CSVダウンロードできる受注とできない受注を比べたところ、特殊文字(機種依存文字)が含まれているか含まれていないかによって変わる事がわかりました。

そこで、受注管理に特殊文字が含まれていてもダウンロードする方法を調べると、以下サイトで記載されている対応方法で解決することができました。
EC-CUBE2 出力したCSVの商品合計数が画面と一致しない

以下ファイルに次のソースコードの12行目~25行目を追加して下さい。

SC_Helper_CSV_Ex.php

パス:/data/class_extends/helper_extends/SC_Helper_CSV_Ex.php

/**
 * CSV関連のヘルパークラス(拡張).
 *
 * LC_Helper_CSV をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Helper
 * @author LOCKON CO.,LTD.
 * @version $Id:SC_Helper_DB_Ex.php 15532 2007-08-31 14:39:46Z nanasess $
 */
class SC_Helper_CSV_Ex extends SC_Helper_CSV
{
    /**
     * CSV 出力用のファイルポインタリソースを開く
     *
     * @return resource ファイルポインタリソース
     */
    public static function &fopen_for_output_csv($filename = 'php://output')
    {
        $fp = fopen($filename, 'w');

        stream_filter_append($fp, 'convert.iconv.utf-8/cp932//TRANSLIT');
        stream_filter_append($fp, 'convert.eccube_lf2crlf');

        return $fp;
    }
}

元々の原因としては、CSV変換する際にUTF-8で登録されているデータをSJISに変換するのですが、
その際に変換できないコードが存在すると該当レコード事出力対象から除外してしまうことが原因
となります。
そこで、CSV出力時のオプションとして「//TRANSLIT」を設定することで、文字コードが変わっても似た文字列で出力してくれるようになります。
今回サンプルで試した例としては、「㋐」と登録されていた文字が、CSV出力後は「(ア)」に代わって出力されていました。