質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

6149閲覧

CSVインポートするときの文字コード変換について

ssk

総合スコア332

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/04/06 15:54

編集2017/04/07 01:43

CSVをインポートしようとすると「文字コードをご確認ください」とエラーメッセージがでてしまいます。挙動しては正しいのですが

$detect_order = 'ASCII,JIS,UTF-8,CP51932,SJIS-win';
に追加するべき文字コードはございますか?

こちら
を参考に実装いたしました。

PHP

1/* 文字コードを変換してファイルを置換 */ 2 $tmp_name = $_FILES['csvfile']['tmp_name']; 3 $detect_order = 'ASCII,JIS,UTF-8,CP51932,SJIS-win'; 4 setlocale(LC_ALL, 'ja_JP.UTF-8'); 5 6 $buffer = file_get_contents($tmp_name); 7 if (!$encoding = mb_detect_encoding($buffer, $detect_order, true)) { 8 // 文字コードの自動判定に失敗 9 unset($buffer); 10 throw new Exception('文字コードをご確認ください'); 11 } 12 file_put_contents($tmp_name, mb_convert_encoding($buffer, 'UTF-8', $encoding));

###補足
Coteditorで開き、エンコーディングを確認すると
Windows,DOSとなっています。

###追記

PHP

1$detect_order = 'ASCII,SJIS,JIS,UTF-8,CP51932,SJIS-win'; 2 setlocale(LC_ALL, 'ja_JP.UTF-8'); 3 4 $buffer = file_get_contents($tmp_name); 5 debug(mb_detect_encoding($buffer)); 6 //出力結果 SJIS

でした。しかし、まだ「文字コードをご確認ください」とエラーが出てきてしまいます。

###追記
OS:macOS Sierra

1.windows→Macへエクセルファイルをメール送信
2.一旦、テキストエディタで開く(文字コード:Windows,DOSと認識)
3,アップロード
4.文字コードエラー

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2017/04/07 00:23

OSはなんでしょう?unix系なら「iconv -l」で使用可能なエンコードが確認できるかもしれません
ssk

2017/04/07 01:40

ありがとうございます。 debug(iconv("SJIS","UTF-8",$buffer));としましたが、falseが返ってきてしまいました。
退会済みユーザー

退会済みユーザー

2017/04/07 03:30

そもそも、読み込もうとしているCSVは誰が作っていてどんなエンコーディングの可能性があるのかわからないものなのですか?
ssk

2017/04/11 05:26

読み込もうとしているCSVは不特定多数の方が作成しているので、エンコーディングの可能性はなるべく網羅しておきたいと思っていました。
guest

回答3

0

エンコーディングを難なく扱いたい場合、
こちらの記事が参考になるかと。

【php】はしご高が文字化けしない文字コード変換 at softelメモ

投稿2017/04/07 03:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2017/04/11 05:25

返信が遅くなり、申し訳ございません。 参考サイトありがとうございます。 サイトを参考に実装して参ります。
guest

0

ベストアンサー

追記にある

PHP

1debug(mb_detect_encoding($buffer));

で結果が取れているのであれば、mb_detect_encodingの第二か第三引数の問題ではないでしょうか。
疑わしいのは第三引数ですかね。
こうしてみてはいかがでしょうか。

PHP

1if (!$encoding = mb_detect_encoding($buffer, $detect_order)) {

投稿2017/04/07 00:05

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2017/04/07 01:37

debug(mb_detect_encoding($buffer)); ↑こちらの出力結果はSJISとなっています。 第三引数のtrueを削除してみましたが、エラーメッセージが表示されてしまいました。
ttyp03

2017/04/07 01:41

となると、第二引数の問題ということになりそうです。 debug(mb_detect_encoding($buffer));の結果がSJISですが、$detect_orderにSJISを含めてもダメなんですよね? ん~不可解。 最悪の場合、全てデフォルト値でしょうかね。 if (!$encoding = mb_detect_encoding($buffer)) { これなら大丈夫なんですよね。
ssk

2017/04/11 05:24

返信が遅くなり、申し訳ございません。 ひとまず、全てデフォルト値で実装しました。 見直して、再度実装致します。
ttyp03

2017/04/11 05:28

決定的な原因がわからなくてモヤモヤしますね。 もし原因が判明しましたら報告していただけるとうれしいです。
guest

0

SJISくらい?

ファイルの文字エンコードを調べるなら
mb_detect_encoding

投稿2017/04/06 16:42

yuki84web

総合スコア1857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ssk

2017/04/06 16:54

ありがとうございます。 情報を追記いたしました。
yuki84web

2017/04/06 22:47

まずは今のファイルの文字コードがどうなっているのか確認してみて下さい
ssk

2017/04/07 01:45

今のファイルの文字コードはWindows,DOSと表示されています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問