|
Re: 商品登録CSVのダウンロードでのバグ 詳細コメントでタグを使っている場合 横から失礼します。 データが崩れる、というのはExcelでのお話でしょうか。
CSVには確固とした仕様は無いように思いますが、一応下記のルールが一般的です。 ○レコードは改行(LF, CR, CR+LF)で区切られる。 ○フィールドはカンマ(,)で区切られる。 ○フィールドはダブルクオート(")で囲うことが出来る。 (上記区切り文字がデータの中にある場合は↑は必須)
ここまでは良いのですが、今度はデータの中にダブルクオートがある場合、これも当然何らかのエスケープ処理をしてやる必要があります。 (そうしないと、その次のキャラクターがたまたまカンマや改行文字であった場合、そこでフィールドが終わってしまったり、ダブルクオートの対応が崩れてしまいます。)
このダブルクオートのエスケープが、以前から2通りありまして。 1.バックスラッシュ(\)でエスケープする方法 (" => \") 2.ダブルクオート(")でエスケープする方法(" => "") で、Excelのデフォルトの仕様は、と今手元のExcel2003で単純に開いてみると、どうやら上記 1.の方の対応が怪しいようです。 もしExcelを利用されている上での問題でしたら、この辺りが原因かも知れません。
ちなみにExcel2003では、2.の方式に手作業で書き換えてみると、改行・ダブルクオート含みの(ちょっと嫌らしい)CSV、ついでにTSVファイル(カンマの代わりにTAB区切り)もすんなり読み込むことが出来ました。
EC-CUBEは1.の方式?っぽいので、これを全て2.の方式に書き換えればとりあえずExcel等での読み込みには支障が出なくなるかも知れません。(ver2系ならSC_Helper_CSV.php 辺り、ver1系なら・・・あちこち ^_^;)
# ちなみに、上記で?が付いてしまうのは、EC-CUBEではこの辺りのポリシーがあまり統一や考察されていない様に見える、という部分が気になるからです。是非、一つのシステムの中では、「原理的にシンプルで(できれば正しく)」統一して欲しいもんです。 (例えばSC_Helper_CSV.php の248行目 $tmp = ereg_replace("[\",]", " ", $tmp); とか、すっごくいやーな空気が漂ってるんですが。)
上記には、間違いや勘違いがあるかも知れません。 開発者の方々や詳しい方の補完が頂ければ幸いです。
よろしくお願いします。
|