fgetcsvで処理したCSVデータが文字化けする時の対処

以下、備忘録。

CSVファイルを開き、fgetcsvで取得したデータを表示してみると見たことのない文字化けが・・・。何か規則があるか眺めてみたけど、よう分からん。大まかには文字列の先頭から数文字が化けてるみたいだけど、中には全く表示されてない物もある状態。

「あいうえお」→「Oうえお」とか「かきくけこ」→「_けこ」とか意味不明(化け方は適当です)

fgetcsvはロケール設定を考慮すると言うことなので、

setlocale(LC_ALL, 'ja_JP');

としてみると、直った!!と思ったら、完全に直ってない・・・。
一部だけ化けるとか、完全に直らないとか、どういうことだよ・・・。

色々調べてみるとPHP5のバグらしい。

CSVの文字コードをUTF-8にするのも手みたいだけど、エクセルで再編集することを考えると面倒なのでボツ。シンプルなCSVなので、explodeで切り分け直しても良さそうなんですけど、yossyさん作の関数でバッチリ解決しました。以下の関数の設定を書けば、fgetcsvの代わりにfgetcsv_regを使うだけですべて解決。う~んすばらし。


function fgetcsv_reg (&$handle, $length = null, $d = ‘,’, $e = ‘”‘) {
$d = preg_quote($d);
$e = preg_quote($e);
$_line = “”;
while ($eof != true) {
$_line .= (empty($length) ? fgets($handle) : fgets($handle, $length));
$itemcnt = preg_match_all(‘/’.$e.’/’, $_line, $dummy);
if ($itemcnt % 2 == 0) $eof = true;
}
$_csv_line = preg_replace(‘/(?:\r\n|[\r\n])?$/’, $d, trim($_line));
$_csv_pattern = ‘/(‘.$e.'[^’.$e.’]*(?:’.$e.$e.'[^’.$e.’]*)*’.$e.’|[^’.$d.’]*)’.$d.’/’;
preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
$_csv_data = $_csv_matches[1];
for($_csv_i=0;$_csv_iPHP5でfgetcsvが正常に動作しない

2010年7月20日追記
上記のソースで表示上は問題ないのですが、サーバーの方でエラーを吐くので若干修正しました。5行目に変数の定義を追加しただけです。
6行目もwhile (($eof != true) and !feof($handle)) {に変えるといいかも。


function fgetcsv_reg (&$handle, $length = null, $d = ‘,’, $e = ‘”‘) {
$d = preg_quote($d);
$e = preg_quote($e);
$_line = “”;
$eof = false; //ココを追加
while ($eof != true) {
$_line .= (empty($length) ? fgets($handle) : fgets($handle, $length));
$itemcnt = preg_match_all(‘/’.$e.’/’, $_line, $dummy);
if ($itemcnt % 2 == 0) $eof = true;
}
$_csv_line = preg_replace(‘/(?:\r\n|[\r\n])?$/’, $d, trim($_line));
$_csv_pattern = ‘/(‘.$e.'[^’.$e.’]*(?:’.$e.$e.'[^’.$e.’]*)*’.$e.’|[^’.$d.’]*)’.$d.’/’;
preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
$_csv_data = $_csv_matches[1];
for($_csv_i=0;$_csv_i

今年の加納ほたる祭りも大盛況でしたよっと

加納ほたる祭りはたくさんの人で大盛況。ホタルも結構飛んでます。

マジックショー

今回は比較的早い時間に行けたので、何気にセクシーな衣装のお姉さんのローカル感たっぷりなマジックショーを見て、ぶらぶらと食べ歩き。昨年に続いてトルコ料理のスルタンがケバブとドンドルマの屋台を出していました。

今年もまた香梅提供のほたる饅頭をゲット。この饅頭と違う菓子も持ってきているようだったので、来てくれた人には何かしら渡せるような配慮なのかもしれません。

今年は何とかホタルを撮影しようかと思っているので、うまく取れたら公開する予定です♪

ポータブルWiFi(DWR-PG)たけーよ。

とりあえず気になっていた定額スタンダードバリューには対応しているようで一安心。キャンペーン中に契約すれば1年間は上限額4,410円ですね。ポータブルWiFi(DWR-PG)の発売日は6月24日。

機能的にベストなんだけど、37,000円はたけー!!よ・・・。SIMフリーにでもしてくれればいいが。さてどうしようか。。。

とりあえずアマゾンでメールの登録だけしておきました。

今日はバッファローのポータブルWi-Fiの詳細発表日

portable_wifi

先日のドコモの夏モデルで発表されたバッファロー製のポータブルWi-Fi。今日が詳細発表日ですね。15時からバッファロー、NTTBP合同の新製品発表会があるみたいです。

ポータブルWi-FiはNTTドコモのFOMAネットワークを利用したモバイル無線LANルータで、イーモバイルのPocket WiFi(ソフトバンクのPocket WiFiも同じ物。契約の方法が少し違う)や、すでに発売された日本通信のb-mobile WiFiのドコモ版といった感じ。

発表になった時の記事を見ると、量販店と一部ドコモショップで発売と言うような書き方で、6月からはじまる定額データプランの新規申込キャンペーンの対象だと書いてある。このキャンペーンで上限額を1,575円割引し、上限4,410円・・・なんたらかんたらと書いてあるけど、これはポータブルWi-Fiに適用されるんだろうか?この金額はバリューコースで対象の端末を購入した場合の金額なんですよね。

このいや~な予感が当たらなければ、第一候補なんだけど。。。もうしばらくしたら分かりますね。

どれもipadでも利用できる!みたいな売り文句が多いですけど、Pocket WiFiが一番決め手がない気がするので、ソフトバンクも何か出してきそうな気がしないでもないです。ipadだけ買って通信は別キャリアなんて一番やめてくれって感じですもんね(ipadの販売形態はよく知りませんが^^;)

ポータブルWi-Fi本体の販売価格も気になるところですが、エリアと通信料金・通信速度、持ち運ぶ物なのでサイズと駆動時間あたりの兼ね合いが決め手ですね。ただ一番新しい事をやっているのは日本通信かな。

ドコモの夏モデルの幾つかは携帯がルーターになるタイプもあるみたいだし、今後、モバイル無線LANルータは間違いなく増えそうです。

台湾料理 一歩堂 @岐阜市

時々、ぶらっと一人で行く中華屋さんの一歩堂。
8周年らしいです。そんな前からあったんだなぁ。

画像はお店でもらってきたチラシなので、次の月曜日に配るチラシなんでしょうね。平日3日間激安価格です!

一歩堂8周年

以前にBKからFlickrに上げた写真があった。餃子セット680円。
Gifu City

2010年5月25日追記
どうやらセット物が大幅に増えたようで、写真の餃子セットは無くなったみたい。残念。
2010年6月20日追記
勘違いでした。サービス期間中だけ餃子セットをやめてたみたい。

台湾料理 一歩堂
【住所】岐阜市城東通3-48
【電話】058-272-0065
【営業時間】11:00~14:00 17:30~3:00 年中無休

[googlemap lat=”35.398087″ lng=”136.765879″ align=”undefined” width=”490px” height=”300px” zoom=”15″ type=”G_NORMAL_MAP”]岐阜県岐阜市城東通3丁目48[/googlemap]