カテゴリ: PHP, CakePHP

ページ: << 1 2 3 4 5 6 7 8 9 10 >>

fgetcsvでの文字化け

パーマリンク 2008/11/30 23:56:20 著者: kumaold メール
カテゴリ: プログラミング, PHP

宿泊案内ネットのデータ移行作業を担当することになったので、現行鯖のDBからCSV形式で取り出したデータを新形式に加工した際の苦労をひとつ。


普通にCSV形式のデータを読み込んで、PHPで整形したりする場合よく使うのがこんな感じでexplodeによる切り分けなわけです。

$row = explode(',' $csv);

しかし今回は、データ中にもカンマ(,)が入っているフィールドがあったため、見事にデータが分断されてしまいました。

そこで元からCSVの展開専用の関数fgetcsvを使えばその辺もしっかり対応しているわけですが、見事なまでの先頭文字の文字化け。

三重県→O重県、山口県→R口県、etc... (→ひどい例


そこでこのfgetcsvの使用前に、これを付けるといいらしい。

setlocale(LC_ALL, 'ja_JP');

まあ若干改善されてはいるものの、まだ文字化け箇所がありました。

どうもいろいろ探ってみると、PHP4→PHP5あたりの仕様変更バグ?とか何とか。



結局のところ、こちらにあった改良版のfgetcsv_regにて無事解決しました。

相変わらず、マルチバイト関係では何かと問題があるなぁ。

<?php
    /**
     * ファイルポインタから行を取得し、CSVフィールドを処理する
     * @param resource handle
     * @param int length
     * @param string delimiter
     * @param string enclosure
     * @return ファイルの終端に達した場合を含み、エラー時にFALSEを返します。
     */
    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_i<count($_csv_data);$_csv_i++){
            $_csv_data[$_csv_i]=preg_replace('/^'.$e.'(.*)'.$e.'$/s','$1',$_csv_data[$_csv_i]);
            $_csv_data[$_csv_i]=str_replace($e.$e, $e, $_csv_data[$_csv_i]);
        }
        return empty($_line) ? false : $_csv_data;
    }
?>


参考にしたサイト



[改訂版] PHP ポケットリファレンス (Pocket reference)[改訂版] PHP ポケットリファレンス (Pocket reference)
大垣 靖男

技術評論社 2005-09-17
売り上げランキング : 67001
おすすめ平均

Amazonで詳しく見る

CakePHPカンファレンス東京

パーマリンク 2008/10/25 23:00:00 著者: kumaold メール
カテゴリ: PHP, CakePHP

遅れながらも週明けになってレポ書きます。

土曜日は今年のCakePHPの一大イベントであるCakePHPカンファレンス東京に前日から東京に泊まってあつさんとMICKさんと一緒にいってきました。


あまりに多すぎて書ききれないので簡単にまとめるとこんな感じ。

 

発表内容

基調講演「国内でのCakePHPの利用状況について」 by 安藤祐介さん

国内3大フレームワークの中で、近年人気が急上昇しているのがCakePHP。 導入も簡単で、拡張性も高く「あらゆるレベルのPHPユーザ」が気軽に導入できるのが特徴ですね。


Agileな開発現場での実践例 by 岸田健一郎さん

今までCakeにはテストケース機能があることは知っていましたが、必要性を感じなかったので放置していました。講演を聞いてみると導入した方が工数がかからないこともあるのでちょっと触ってみようかな。


Garrett J Woodworth氏 招待講演

お昼も食べ終わったところで、午後から一番メインの講演です。

どういう経緯でCakePHPが開発されたのかなど、開発者の意図を直接聞くことのできる貴重な機会でした。通訳の堂園さんすごすぎる。

1.2はRC3で最後かと思ったら、まだRC4出すとか、ロードマップは長い。

印象的だったところ。Good cakeにするにはなかなか難しい・・・。

 Bad cake!                     Good cake!
┏━━━━━┓_View     ┏━━━━━┓_View
┠─────┨        ┠─────┨_Controller
┃     ┃─Controller  ┠─────┨
┠─────┨_Model     ┃     ┃─Model
┗━━━━━┛         ┗━━━━━┛

XoopsCubeなのにCakePHPを使う! by 鶴岡直也さん

色々とトラブル続きの面白い発表でした。 なかなか拡張性の高いCMSだとは聞いていたのですが、実際に見たのは初めてです。また今度サーバに導入してみよっかな。


ライトニングトーク x4

いやぁ、聞いていても5分ってほんとに短いなぁ。 こんな短時間でも内容はしっかり伝わっているのですごいと思います。

 

終了後は懇親会へ


カンファレンス終了後は少し離れた場所にあるナポリの下町食堂 お茶の水店にて、懇親会を行いました。

こういうのは初めてだったのですが、CakePHPに限らず色々な方々と話ができたので楽しかったです。名刺を切らしたのが惜しかったなぁ。


最後のネタとして、CakePHPの公式HPのアレが出てきちゃいました。

ケーキ屋さんに切れ目の重要さを力説して作ってもらったが、切れ目無しできたのでナポリの下町食堂さんで切れ目を入れてもらったというエピソードつきw

ケーキを持っているのはCakePHP開発者でゲストのGarrett J Woodworth氏


東京ではこんなにもCakePHPが熱いと言うことがよくわかりました。

本当に充実した一日で、勉強になる発表がたくさんありました。
また機会があれば是非とも行きたいです。

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

CakePHP日本語化まとめページ

パーマリンク 2008/10/09 20:00:00 著者: kumaold メール
カテゴリ: プログラミング, PHP, CakePHP

先日、あつさんに紹介していただいたCakePHP日本語化ファイルが好評なので、ひとつ分かりやすいまとめページを作成してみました。


CakePHP 1.2 日本語化



早速ですが、CakePHP 1.2 RC3に対応した日本語化ファイルも公開しましたので是非使っていただければと思います。

type="text/javascript">
type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

<< 1 2 3 4 5 6 7 8 9 10 >>

一六社で働くITエンジニアのブログ。

普段はWeb系システム開発と地元のPCサポートをやってます。いつの間にやら会社に8年目。
技術ネタ中心に日々の仕事と生活と趣味やらを気が向いたら書いてます。

2017年3月
 << <   > >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

検索

XMLフィード

16ブログ     powered by b2evolution free blog software