phpでCSVファルを読み込み処理をしたいです。
ファイルの中身が下記のようになっています。
"テスト","名前","不能","3","4","5"
プログラムで下記のように記載してみました。
$strFilePath = 'C:';
$strFileName = 'Test.csv';
$file = new SplFileObject($strFilePath.$strFileName);
$file->setFlags(SplFileObject::READ_CSV);
// ファイル内のデータループ
foreach ( $file as $key => $line ) {
$line=mb_convert_encoding( $line, "utf-8", "sjis" );
var_dump($line);
}
を実行すると
array(5) {
[0]=> string(9) "テスト"
[1]=> string(6) "名前"
[2]=> string(10) "不能",3""
[3]=> string(1) "4"
[4]=> string(1) "5"
}
と表示されます。
本当は下記のようになってほしいです。
array(5) {
[0]=> string(9) "テスト"
[1]=> string(6) "名前"
[2]=> string(6) "不能"
[3]=> string(1) "3"
[4]=> string(1) "4"
[5]=> string(1) "5"
}
「能」や「表」の5C問題でしょうか?
どうすれば、希望のようにカンマ区切りになるでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
"不能",の能の部分で発生しているいわゆる5C問題です。
次のライブラリで完全に解決できます。
https://packagist.org/packages/fw3/streams
他の方が書かれていたiconvを用いた変換の場合、変換不可能な文字があった場合、行そのものをなかった事として動作するので大変危険です。
その他、CSVのキャラクタセット変換における諸問題は次の資料に一通り全て記載されています。
https://speakerdeck.com/ickx/phperkaigi2021-phpd …
No.2
- 回答日時:
ご推察の通り 5C 問題の様です。
能(U+80FD) の SJIS 符号は `945C`
CSV のエスケープ文字のデフォルトは $escape = "\\"
https://www.php.net/manual/ja/splfileobject.setc …
SJIS を理解しないプログラムが 5C をエスケープ文字と判断して誤作動
これを解決するには UTF-8 の形式で SplFileObject に読み込ませばよいのですが、調べた限りエンコード指定の引数が無いようなので、フィルタでエンコード変換した結果の入力ストリームを読み込ませましょう。
例)
$fileName = "Test.csv";
$wrap = "php://filter/read=convert.iconv.CP932.UTF-8/resource=$fileName";
$file = new SplFileObject($wrap);
// 変換済みなので読み込み後の mb_convert_encoding は不要
参考)
https://www.php.net/manual/ja/wrappers.php.php#w …
https://www.php.net/manual/ja/filters.convert.ph …
No.1
- 回答日時:
本当にそのような問題なのだとしたら, 「根本から」処理しないと話にならないのではないだろうか.
https://qiita.com/bstyle6130/items/4db3911e0a89d …
https://innx-hidenori.hatenadiary.org/entry/2009 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VBAでパワーシェルを実行したいのですが、なかなかうまく出来ず、有識者の知識をお借りさせてください。 2 2024/05/11 00:25
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2024/01/16 16:33
- Visual Basic(VBA) VBAの間違い教えて下さい 5 2024/08/03 21:35
- PHP ワードプレスサイト PHP8.0.25でのWarningエラー 1 2023/06/12 11:44
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
このQ&Aを見た人はこんなQ&Aも見ています
-


プログラミングのやり方ざっくりでいいから教えて
その他(プログラミング・Web制作)
-


Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-


pythonについて
その他(プログラミング・Web制作)
-
-
4

C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
5

C# で 数式文字列処理を処理する方法
C言語・C++・C#
-
6

IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
7

従業員が1名だけのSierっているんですか? プログラマー
その他(プログラミング・Web制作)
-
8

php でqiitaのサイトにあったファイルのダウンロード関数を使ってダウンロードしているのですが
PHP
-
9

C言語 関数、変数の宣言について
C言語・C++・C#
-
10

perl の open について教えてください。
Perl
-
11

あってる
C言語・C++・C#
-
12

趣味がプログラミングだと言ってもいい?
その他(プログラミング・Web制作)
-
13

プログラミングの進学について
その他(プログラミング・Web制作)
-
14

フロントエンドエンジニアをしていますが、スキルアップのための転職、異動は3年目では早すぎますか? 今
その他(プログラミング・Web制作)
-
15

至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
16

アセンブリ言語について。
その他(プログラミング・Web制作)
-
17

Pythonのエラーメッセージをコピーする方法
その他(プログラミング・Web制作)
-
18

VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
19

PHPの勉強してます。 配列のところですが、 実行結果は、9になりますが、 そのロジックを教えてくだ
PHP
-
20

共テのプログラミング言語はPython等と違いほとんど日本語ですが、その共テのプログラミング言語を解
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルの遷移がうまく行われ...
-
入力した部分を表示させたまま...
-
PHPの変わった閉じタグの必要性...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
フォームで戻った際に入力済み...
-
composerをインストールしたい...
-
PHPSpreadsheetによる書き出し...
-
HTML PHP ラジオボタンのイベント
-
PHPの勉強してます。 配列のと...
-
【初心者】XAMPPのapacheの(恐...
-
Q&Aサイトを作成していてURLの...
-
掲示板を作成しておりアップロ...
-
PHPのエラーの解消法について教...
-
PHPで画像の渡しが上手く行きま...
-
php エラー
-
画像ファイルの名前をそのままU...
-
プログラムコードを入力する場...
-
【スプレッドシート】順位のつけ方
-
配列の値の更新方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
PHP8でWarning:Undefined varia...
-
marginの値でマイナス値を設定...
-
phpでcookieがうまく保存されない
-
SplFileObject を利用したとき...
-
PHPSpreadsheetを使って関数を...
-
PHPSpreadsheetによる書き出し...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
PostgreSQLからCSV形式でエクス...
-
PHPを使って、別サイトの一部を...
-
BASIC認証のフォームをデザイン...
-
入力した部分を表示させたまま...
-
【初心者】XAMPPのapacheの(恐...
-
ログイン機の付きの掲示板サイ...
-
ワードプレスサイト PHP8.0.25...
-
Postgresの特定のカラムからス...
-
PHPで画像の渡しが上手く行きま...
-
PHPの勉強してます。 配列のと...
おすすめ情報









