内部文字コードをUTF-8に設定し、CSV処理のプログラムを開発していたのですが、fgetcsv()関数で半角カタカナが取得できない現象ではまってしまいました。
対応策を備忘録として残しておきます。
PHPマニュアルには以下の記載があります。
via PHP Manual
getcsv — ファイルポインタから行を取得し、CSVフィールドを処理する
注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1 バイトエンコーディングは間違って読み込まれます。
なので、プログラム内でロケールの設定をします。
ロケールの設定はsetlocale()関数で行うことができます。
via PHP Manual
setlocale — ロケール情報を設定する
CSV処理の前に下記のようにロケールを日本語の設定にすると、fgetcsv()関数が正常動作できます。
//setlocale -- ロケール情報をセットする
setlocale(LC_ALL, 'ja_JP.UTF-8');
// CSV処理
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
……
追記[2008.02.06]:
最初の公開時
setlocale(LC_ALL, 'ja_JP.');
としていましたが
setlocale(LC_ALL, 'ja_JP.UTF-8');
の方がより正しいと判明しましたので訂正します。
via: ERGOSOFT|エルゴソフト

MacOSの日本語環境アプリケーションを提供していていたERGOSOFTがパッケージソフト事業を終了するそうです。
残念です。
ここ最近Appleは好調ですが、それを取り巻くサードパーティは依然厳しいのでしょうか……
2008/01/22にさくらインターネット株式会社から「さくらのレンタルサーバ」スタンダード・プレミアム PHP5 の提供」のメールが届きました。
2008年1月29日より PHP5 を正式に提供とのこと。
(PHP徹底攻略シリーズ) (PHP徹底攻略シリーズ)" />
IDEA*IDEA さんにCakePHPでCSVファイルをダウンロードさせたいときの作法 | IDEA*IDEA という記事が掲載されていました。
The Bakery! だと
という別のアプローチでのCSV出力方法が投稿されています。
デバッグ情報の出力設定をしているとデバッグ情報も出力されてしまうので、CSV出力の時だけオフにするようにコントローラに以下の記述をすると良いでしょう。
Configure::write('debug', '0');
via
MySQL AB :: Sun to Acquire MySQL
Sun Microsystems Announces Agreement to Acquire MySQL, Developer of the World’s Most Popular Open Source Database
2008/01/17 2008/01/16 Sun MicrosystemsがMySQL ABを買収(正しくは買収の最終合意)というニュースが世界中を駆けめぐりました。
MySQLのメーリングリスト(via [mysql 14348] Re: Sun Microsystemsに買収されたようです。)によると、日本のMySQL ABの中の人たちも「プレスリリースのタイミングでこの事実を知」ったそうです。
メーリングリストの表題に”RE:”とありますが、実は最初に一方を入れたのはMySQL ABとは関係ない方でした。
このメールが流れて以降、2008/01/19現在誰もメーリングリストを使っていません……
![]()
CakePHPオフィシャルサイトがリニューアルされていたのですね。
CakePHP のおいしい食べ方さんのCakePHP1.2ベータ+サイトリニューアルで知りました。
ブログでThe Bekary::New Year, New Betaを紹介したとき気付かないと、自分……
ヒップホップ系音楽情報サイトnotrax様のEBONY PAGESのシステム開発を担当しました。
関係者の皆様、お疲れ様でした。
2008/01/03にPHP4.4.8リリースされました。
via PHP公式サイト
PHP 4.4.8 Released
[03-Jan-2008]The PHP development team would like to announce the immediate availability of PHP 4.4.8. It continues to improve the security and the stability of the 4.4 branch and all users are strongly encouraged to upgrade to it as soon as possible. This release wraps up all the outstanding patches for the PHP 4.4 series, and is therefore the last normal PHP 4.4 release. If necessary, releases to address security issues could be made until 2008-08-08.
Security Enhancements and Fixes in PHP 4.4.8:
* Improved fix for MOPB-02-2007.
* Fixed an integer overflow inside chunk_split(). Identified by Gerhard Wagner.
* Fixed integer overlow in strspn().
* Fixed regression in glob when open_basedir is on introduced by #41655 fix.
* Fixed money_format() not to accept multiple %i or %n tokens.
* Addded “max_input_nesting_level” php.ini option to limit nesting level of input variables. Fix for MOPB-03-2007.
* Fixed INFILE LOCAL option handling with MySQL – now not allowed when open_basedir or safe_mode is active.
* Fixed session.save_path and error_log values to be checked against open_basedir and safe_mode (CVE-2007-3378).For a full list of changes in PHP 4.4.8, see the ChangeLog.
Historical PHP 4 Stable: 4.4.8
ChangeLog
訊かれたので、忘れないようにメモ。
CakePHP1.1系では、重複チェックは自分で作り込む必要があります。
参考になる情報:
hetimaの日記::CakePHP の重複チェックをクールに決める
→hetimaさんが、1.2系バリデーションを1.1系に組み込んで重複チェックをする方法を掲載しています。
The Bekary::Checking for duplicate records (unique record)
→hetimaさんが参考にされたThe Bekaryのページ
CakePHP Users in Japan::モデルの重複チェック
→CakePHP Users in Japanにも投稿がありますね。
The Bekary::New Year, New Beta
新年早々CakePHPのニューリビジョンがリリースされました。
追記[2008/01/04]:
重要なことを書き忘れました。
バージョン1.2系はベータ版になりました!!