Skip to content
New issue

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

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

Already on GitHub? # to your account

fgetcsvRegによるCSV読み込み時に正常にデータを読み取れない場合がある #3938

Open
seto1 opened this issue Oct 21, 2024 · 6 comments
Labels
Adjusting 調整中

Comments

@seto1
Copy link
Collaborator

seto1 commented Oct 21, 2024

同じCSVでも特定の行でのみ発生
最初のいくつかの列のデータしか配列に入ってこない状態

baserCMS version : 4.8.2-dev
https://github.com/baserproject/basercms/blob/dev-4/lib/Baser/basics.php#L511
5系にも同様の関数が存在する
https://github.com/baserproject/basercms/blob/5.1.x/plugins/baser-core/src/Utility/BcUtil.php#L1608

loadCsvToArrayにて、fgetcsvRegをfgetcsvに変更すると正常にデータを読み取れる
https://github.com/baserproject/basercms/blob/dev-4/lib/Baser/Model/Datasource/DboSource.php#L4502

TODO

@seto1
Copy link
Collaborator Author

seto1 commented Oct 21, 2024

fgetcsvの代わりにfgetcsvRegを使用しているのは文字化け対策?
https://gyagya1111.blogspot.com/2010/12/php5fgetcsv.html
sjisの対応をやめたら不要?

@seto1
Copy link
Collaborator Author

seto1 commented Oct 22, 2024

特定のこの文字列が含まれていたら発生するというものではなさそう
「"」の出現回数?
fgetcsvReg内の正規表現を使った解析部分でデータが消える

@seto1
Copy link
Collaborator Author

seto1 commented Oct 22, 2024

以下のcsvをsjisとutf8で作成
DboSource->loadCsvToArray で読み込み
loadCsvToArrayのfgetcsvRegとfgetcsvの違いを確認

"a","i","u"
"あ","い","う"

sjis - fgetcsvReg => OK
sjis - fgetcsv => OK
utf8 - fgetcsvReg => OK
utf8 - fgetcsv => OK

"a","i","u","e"
"あ","い","う","能"

sjis - fgetcsvReg => OK
sjis - fgetcsv => NG
utf8 - fgetcsvReg => OK
utf8 - fgetcsv => OK

"a","i","u","能"
"あ","い","う","能"

sjis - fgetcsvReg => NG
sjis - fgetcsv => NG
utf8 - fgetcsvReg => OK
utf8 - fgetcsv => OK

"a","i","u",""""
"あ","い","う","「"」x6000回の繰り返し"

sjis - fgetcsvReg => NG: 行が複数行に分かれる
sjis - fgetcsv => OK
utf8 - fgetcsvReg => NG: データが途中で消える
utf8 - fgetcsv => NG: 行が複数行に分かれる

"a","i","u",""""
"あ","い","う","「"」x13000回の繰り返し"

sjis - fgetcsvReg => NG: 行が複数行に分かれる
sjis - fgetcsv => OK
utf8 - fgetcsvReg => NG: データが途中で消える
utf8 - fgetcsv => NG: 行が複数行に分かれる

sjis - fgetcsvReg(length制限なし) => NG: データが途中で消える
sjis - fgetcsv(length制限なし) => OK
utf8 - fgetcsvReg(length制限なし) => NG: データが途中で消える
utf8 - fgetcsv(length制限なし) => OK

@seto1
Copy link
Collaborator Author

seto1 commented Oct 22, 2024

事前にutf8に変換する方法も考えられるけどsjisの対応をやめるのがよさそう
fgetcsvのlength指定もなしにする

@kk-uchino kk-uchino added the Adjusting 調整中 label Oct 25, 2024
@seto1
Copy link
Collaborator Author

seto1 commented Oct 28, 2024

テーマの初期データ用CSVでsjisが使われているものがあるので、4系でsjisの対応をやめると問題が起きそう
5系は要調査

fgetcsvRegに文字コード渡してutf8の場合はfgetcsvを返す?
sjisの問題は残るけど問題は一番少なさそう

5系はsjisのサポート切りたい

@seto1
Copy link
Collaborator Author

seto1 commented Nov 8, 2024

5系だと再現しない
PHPのバージョンか、なにかの設定値?
最新版では再現しないので優先度下げる

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Adjusting 調整中
Projects
None yet
Development

No branches or pull requests

2 participants