ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

fgetcsvでUTF-8のCSVが読み込めない

fgetcsvでUTF-8のCSVが読み込めない

OS RHEL4
PHP 5.2.3
Apache 2.0.52



たとえば以下のようなCSVファイルだとだめ。
Aの部分しか読み込まれず、全角部分は空白。
A,ぜんぜん,読み込め,ない

ダブルコーテーションで囲うとちゃんと読み込めた。
B,"囲うと","普通に","読めた"

でもExcelで常時「"」で囲ってCSVを出力するにはマクロを組むしかないらしい。
http://support.microsoft.com/default.aspx?scid=kb;ja;123183
面倒くさいので、なんとか読めるようにしたい。

以下は試したこと。でも結局ダメだった。。。



・環境変数 LANG を ja_JP.UTF-8 に変更

どこかで文字コードが悪いに違いない、ということで
Apache+PHPで環境変数を追加したい」でやってみた方法と同じく /etc/sysconfig/httpd に
export LANG=ja_JP.UTF-8
と追記。でもなぜか反映されずに LANG は「c」のままだった。
追加は OK だが上書きは NG らしい。
nobody ユーザの環境変数がこっちより後に読み込まれて上書きされてるとか、そんな感じか?
そんなことあんの?

仕方なくソースコードに
putenv('LANG=ja_JP.UTF-8');
を追記。

phpinfo() で見るとちゃんと environment セクションの LANG が書き換えられていた。
でも CSV 読み込み結果は変わらず。

ためしに $_ENV['LANG'] を出力してみると、
なぜか「ja_JP.UTF-8」ではなく「c」に。

putenv で環境変数を書き換えると$_ENV に反映されないらしい。
意味が分からん。

とりあえず、やっていいのか分からないけど、$_ENV に直接代入してみた。
$_ENV['LANG']='ja_JP.UTF-8';

でもCSV読み込み結果は変わらず。


見当違いの箇所をいじってんのかなぁ・・。
スポンサーサイト
  1. 2008/01/21(月) 17:32:50|
  2. その他
  3. | トラックバック:1
  4. | コメント:2
<<PHPでJSON | ホーム | Apache+PHPで環境変数を追加したい>>

コメント

タイトルtypoなおしました

fgetsv ⇒ fgetcsv
  1. 2008/01/25(金) 16:06:04 |
  2. URL |
  3. yukke #sSHoJftA
  4. [ 編集]

解決策

私も同じ問題で困っていましたが、

setlocale(LC_ALL, 'ja_JP.UTF-8');

この一行を追加することで解決しました。

PHP4では自動的に文字コードを判別してくれるようですが、
PHP5以降では明示的に宣言する必要があるのだとか。
  1. 2008/02/07(木) 11:06:45 |
  2. URL |
  3. 未来樹 #-
  4. [ 編集]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://yukke.blog3.fc2.com/tb.php/69-30955860
この記事にトラックバックする(FC2ブログユーザー)

【文字コード】の口コミ情報を探しているなら

文字コード に関する口コミ情報を探していますか?最新の検索結果をまとめて、口コミや評判、ショッピング情報をお届けしています…
  1. 2008/01/21(月) 20:34:52 |
  2. 人気のキーワードからまとめてサーチ!
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。