Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix issue/5252 - CSVインポート時にデリミタがエスケープされていることがある #5407

Merged
merged 9 commits into from
Jul 19, 2022

Conversation

TPS-NghiaLe
Copy link
Contributor

@TPS-NghiaLe TPS-NghiaLe commented Jun 24, 2022

概要(Overview・Refs Issue)

#5252 の修正

方針(Policy)

Shift_JISの特殊文字により、ファイル内のデータが正しくない取得されて、エンコードが不正になります。

解決方法 : したがって、コントローラーで処理する前にエンコードデータをと取得することが必要です。

実装に関する補足(Appendix)

テスト(Test)

相談(Discussion)

マイナーバージョン互換性保持のための制限事項チェックリスト

  • 既存機能の仕様変更はありません
  • フックポイントの呼び出しタイミングの変更はありません
  • フックポイントのパラメータの削除・データ型の変更はありません
  • twigファイルに渡しているパラメータの削除・データ型の変更はありません
  • Serviceクラスの公開関数の、引数の削除・データ型の変更はありません
  • 入出力ファイル(CSVなど)のフォーマット変更はありません

レビュワー確認項目

  • 動作確認
  • コードレビュー
  • E2E/Unit テスト確認(テストの追加・変更が必要かどうか)
  • 互換性が保持されているか
  • セキュリティ上の問題がないか
    • 権限を超えた操作が可能にならないか
    • 不要なファイルアップロードがないか
    • 外部へ公開されるファイルや機能の追加ではないか
    • テンプレートでのエスケープ漏れがないか

@chihiro-adachi chihiro-adachi added this to the 4.2.0 milestone Jun 28, 2022
Copy link
Contributor

@nanasess nanasess left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ロケールの関係?で、正しく CSV ファイルをパースできなくなる模様。列が欠落したりするため要調査

@nanasess
Copy link
Contributor

ロケールの関係?で、正しく CSV ファイルをパースできなくなる模様。列が欠落したりするため要調査

SplFileObject::READ_CSV が SJIS に対応していないため、正常にパースできない。
2系のように、 stream_filter を使用することで実現できるかもしれない
https://github.com/EC-CUBE/ec-cube2/blob/3129289ea4629337946609025cf3e3cb96436000/data/class/helper/SC_Helper_CSV.php#L380-L400

nanasess added 2 commits July 11, 2022 17:13
- file_get_contents でファイルを読み込んで変換していたのを stream filter で変換するよう修正
- 改行コード変換も stream filter で変換するよう修正
@nanasess
Copy link
Contributor

stream filter を使用して変換することで対応しました。
また、 AbstractCsvImportController で処理していた改行コード変換も stream filter を使用するようにしました

@chihiro-adachi
Copy link
Contributor

@nanasess
ありがとうございます。

こちらのCSV、商品CSV登録時にエラーとなりました。見ていただくことはできますでしょうか?
product_20220715141042.csv

image

@nanasess
Copy link
Contributor

@chihiro-adachi

こちらのCSV、商品CSV登録時にエラーとなりました。見ていただくことはできますでしょうか?
product_20220715141042.csv

このCSVファイルには商品IDの項目が無いためエラーになっていたようです。商品IDを追加したところ正常にアップロードできましたのでご確認ください

@chihiro-adachi
Copy link
Contributor

商品IDを追加したCSVでも同様のエラーとなりました。
ファイルを添付しておきます。

product-sjis.csv
product-utf-8.csv

@nanasess
Copy link
Contributor

@chihiro-adachi stream filter に関係なく、 $form['import_file']->getData() でデータを取り出した時点で以下のようにデータが壊れてしまう模様です。。。

商品ID,公開ステータス(ID),販売種別(ID),商品名,販売価格,在庫数,在庫数無制限フラグ
,1,1,"10テスト機構",2800,100,
,1,1,11テスト機構"",2800,100,

@chihiro-adachi
Copy link
Contributor

@nanasess

ファイルを分割するタイミングで壊れてしまうようなので、分割前にフィルタかける必要がありそうです。

一応以下でうまくいきました。
chihiro-adachi@0bf4a28

@nanasess
Copy link
Contributor

@chihiro-adachi なるほど、ありがとうございます!

@nanasess
Copy link
Contributor

@chihiro-adachi いただいたコミットを取り込んでリファクタリングしました。これで大丈夫だと思います。

@chihiro-adachi
Copy link
Contributor

@nanasess
ありがとうございます!
sjis.csv, utf-8.csvともに正常に登録できました。

@chihiro-adachi chihiro-adachi merged commit 9e9aafc into EC-CUBE:4.2 Jul 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants