Web.fla

主食は、html/css/php/javascript(jQuery) デザートはactionscript!WEBに関することをメモってくサイト

*

[PHP]CSVを読み込み時、文字化けさせないで読み込む方法とは!?

      2015/07/18

PHPを利用してCSVを読み込んだり書き込んだりする処理はよくあると思います。ただそれ以上にCSVを読み込むと文字化けするという事もあると思います。

まぁだいたいプログラムとかhtmlを書くときって文字コードがUTF8なんですけど、幸か不幸かCSVファイルを開くのにエクセルがよく利用されると思いますがエクセルでCSV形式で保存するとSJISになってしまうんですよね。もうなんなだこの仕様は(笑)
そんな訳で、CSVファイルを読みこんで表示させる時に文字化けしないように処理しましょうっていうのか今回の目的です。

PHPでどう処理するのか?

fgetcsv() を利用して読み込んだりするとmb_convert_variables() を使って配列の文字列を変換するか、mb_convert_encoding() を使ってループ内で一行ずつ文字コードを変換していく方法があります。

今回は、file_get_contents()とtmpfile()を利用した方法をメモしていこうかと思います。

この方法だとmb_convert_encoding() を一回使うだけでエンコードの異なる CSV ファイルの読み込みができるので効率的だとういうことですね。

CSVを読み込みファイルを表示する

とりあえずは、CSVファイルを読みこんで表示するまでのコードを記載します。

file_get_contentsで読み込む

file_get_contents()はファイルの内容を全て文字列に読み込む関数なので、一旦すべての内容を読み込みます。

mb_convert_encodingで一気に文字コードを変換する

sjis-winからUTF8へ文字コードを変換したデータを再度、変数に戻します。

一時ファイルを作成して文字コードを変換したデータを書き込む。

tmpfile関数を利用して一時ファイルを作成します。

その後、先ほど文字コードを変換した「$data」のデータをfwrite()を利用して書き込みます。rewind()でファイルポインタを先頭に戻します。

一時ファイルのデータを再度CSVとして読み込む

一時ファイルをfgetcsv()を利用してCSVとして読み込みし、新しい配列にデータをいれます。

最後は、for文を利用して配列のデータの中身を表示しています。*ちなみにCSVファイルは1行のデータ数と、その1行のデータの詳細(サンプルでは商品名とブランド)の配列とで2次元配列となっています。

 - php ,

     

Message

  関連記事

php-icon
【PHP】画像ファイルのアップロードから削除までの流れ

ここまでPHPでファイルのアップロードやフォルダ内のファイル一覧表示などを記事を …

php-icon
【PHP】PHPでリロード対策をして二重投稿を防止しよう

phpでフォームとか作ってデータを送信できた!!!って喜んでるのもつかの間(笑い …

php-icon
【PHP】phpでファイルのアップロード

ファイルのアップロードのシーンって結構ありそうなの定型文のようにメモっておこう。 …

php-icon
PHPでユーザーエージェントを判別

前回はjavscriptでユーザーエージェントを判別していたが、PHPもついでに …

php-icon
【PHP】多次元配列をあるキーを基準に並び替えたい

ある案件で画像のパス、タイトル、カテゴリ、リンク先などのデータを多次元配列で管理 …

php-icon
【PHP】URLを分解して配列で取り出すには?

PHPでプログラムをするとやっぱURLって結構いじるときありますよね。 例えば、 …

php-icon
【PHP】画像をダウンロードして特定のディレクトリに保存する方法

よくブラウザで画像を右クリック名前をつけて保存。なんていうのやることあるけど、p …

php-icon
phpでの正規表現によるバリデートの練習

フォームで入力された値を正規表現でチェックしてチェックした値が正しければ送信ボタ …

php-icon
【PHP】ftruncateでファイルの中身を上書きするには?

たまたま、ファイルの中身を別のファイルに書き換えるというか上書きするようなことを …

php-icon
【PHP】phpによるcsvの複数行の削除方法が知りたい。

さて、最近ちょいちょいPHPに興味を再び持ち始めています。なぜかサーバーサイドで …