
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制作)
-
pythonについて
その他(プログラミング・Web制作)
-
perl の open について教えてください。
Perl
-
-
4
php でqiitaのサイトにあったファイルのダウンロード関数を使ってダウンロードしているのですが
PHP
-
5
従業員が1名だけのSierっているんですか? プログラマー
その他(プログラミング・Web制作)
-
6
C言語 関数、変数の宣言について
C言語・C++・C#
-
7
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
8
C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
9
C# で 数式文字列処理を処理する方法
C言語・C++・C#
-
10
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
11
あってる
C言語・C++・C#
-
12
趣味がプログラミングだと言ってもいい?
その他(プログラミング・Web制作)
-
13
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
14
フロントエンドエンジニアをしていますが、スキルアップのための転職、異動は3年目では早すぎますか? 今
その他(プログラミング・Web制作)
-
15
Pythonのエラーメッセージをコピーする方法
その他(プログラミング・Web制作)
-
16
返信機能のツリー構造の深さをライブドアブログのように無限にすることは可能でしょうか?
PHP
-
17
プログラミングの進学について
その他(プログラミング・Web制作)
-
18
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
19
アセンブリ言語について。
その他(プログラミング・Web制作)
-
20
C言語について(初心者)
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
composerをインストールしたい...
-
PHPSpreadsheetによる書き出し...
-
phpの問い合わせフォームを作っ...
-
php ログイン
-
PHPSpreadsheetを使って関数を...
-
フォームで戻った際に入力済み...
-
PHPで画像の渡しが上手く行きま...
-
marginの値でマイナス値を設定...
-
PHPの勉強してます。 配列のと...
-
ゆゆにゃ。
-
【初心者】XAMPPのapacheの(恐...
-
PHP8を使うと、大量のWarningが...
-
SFTPなどは使わないホームペー...
-
ファイルアップロードの上限を...
-
php 確認表示画面で値をSESSION...
-
php 完了画面の送信メールのコ...
-
PHPで訪問回数を表示するカウン...
-
csvファイルについて教えて下さ...
-
PHPのエラーの解消法について教...
-
PHP echo バックスラッシュの使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
PHPを使って、別サイトの一部を...
-
phpでcookieがうまく保存されない
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
フォームで戻った際に入力済み...
-
PHPのセッション有効期限について
-
PHP MySql ページング
-
PHPのエラーの解消法について教...
-
PHPで画像の渡しが上手く行きま...
-
PostgreSQLからCSV形式でエクス...
-
BASIC認証のフォームをデザイン...
-
Content-Typeが機能していない?
-
php 入力画面から確認表示画面...
-
PHPSpreadsheetによる書き出し...
-
$_SESSIONに渡した後はそのまま...
-
重複を防ぐ記述について教えて...
-
sessioncookieをではなくcookie...
おすすめ情報