csvファイルをphpで読み取る時に生じる文字化け

Free Wi-fiスポットの位置情報を表示するアプリを作ります。

今回インターネットから位置情報を示すオープンデータをcsv形式でダウンロードし、’public_wireless_lan.csv’という名前で保存しました。

このcsvファイルを読み込むコードをPHPで書きます。

“wordpress/wp-admin”に”extends”というディレクトリを作成し、ダウンロードしたcsvファイルとそれを読み込むPHPのファイル”upload.php”を保存します。

“wordpress/wp-admin/extends/upload.php”


<?php require('../../wp-blog-header.php'); //2つ上のディレクトリ内にあるので function csv_to_array($csv) { $file = new SplFileObject($csv); $file->setFlags(SplFileObject::READ_CSV); $array = array(); foreach ($file as $line) { //空行はスキップ if (empty($line)) continue; $array[] = $line; } mb_convert_variables("UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"), $array); //文字コード変換 return $array; } $records = csv_to_array('public_wireless_lan.csv');//csvファイルを開く for ($i=1 ; $i<count($records);$i++){ var_dump($records[$i][4]); //[0]から始まるはずだが、今回のcsvファイルの1列目は無意味なので、5列目を確認する $post_value = array( 'post_title' => $records[$i][4], //post title スポット名 'post_content' => '[cft format=0]', //post content 各スポットの詳細 'post_status' => 'publish' //公開ステータス ); $insert_id = wp_insert_post($post_value); if( $insert_id != 0 ){ update_post_meta($insert_id, 'name',$records[$i][4] == null ? 0 : $records[$i][4]); //ここの[4]はcsvファイルの5列目 update_post_meta($insert_id, 'address',$records[$i][7] == null ? 0 : $records[$i][7]); //ここの[7]はcsvファイルの8列目 update_post_meta($insert_id, 'latitude',$records[$i][9] == null ? 0 : $records[$i][9]); //ここの[8]はcsvファイルの10列目 update_post_meta($insert_id, 'longitude',$records[$i][10] == null ? 0 : $records[$i][10]); //ここの[9]はcsvファイルの11列目 var_dump('Successfully Uploaded!'); } else{ var_dump('Error. Insert Id was Zero.'); } } ?>

参考にさせていただいたサイト : WordPressのデータベースにオープンデータを登録する



[つまづいたところ]

ダウンロードしたcsvのオープンデータに含まれる日本語が上手くwordpressに取り込めず苦戦しました…

原因はオープンデータ内の日本語が文字化けしてしまっていたようです。

エンコードして文字コードを変換することで解決できました。

参考にさせていただいたサイト : PHPで文字化けせずにCSVファイルを読み込む方法