INFINITY BLUE
msgbartop
ご訪問ありがとうございます。『INFINITY BLUE』は、WEB+DB開発の情報や仕事の実績などを紹介しています。
msgbarbottom

03 2月 08 備忘録: PHP: fgetcsv()関数を使用する際の注意

内部文字コードを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');

の方がより正しいと判明しましたので訂正します。

PEAR―PHPライブラリPHPライブラリコレクション



Leave a Comment