- ベストアンサー
ファイルの文字コードを調べる方法【php】
- phpでファイルの文字コードを調べる方法を知りたいです。アップロードしたファイルの文字コードを確認して、適切なエンコードを行いたいです。
- shift-jisでエンコードされたファイルを読み込んでいますが、全てのファイルがそうとは限りません。ファイルの文字コードを調べる方法について教えてください。
- 文字化けを起こさずにアップロードしたファイルの文字コードを調べたいです。[auto]を試したところ文字化けが発生しました。他の方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ファイルの文字コード統一については、運用周りやユーザ教育で徹底するのが今後のためになります。しかし、どうしてもプログラム側で対処しなければならないのであれば。 たいていのLinuxにはnkfというコマンドが付随しています(無ければ追加でインストール可能) nkfは文字コード推測及び変換ツールです。 nkf -g ファイル名 にてかなりの正解率で文字コードを推測するのでこれをphpから呼び出すという手です。 参考URLに書いてある通りなのですが、かいつまんで解説すると。 function file_charset ($charset_file_path, $char_set) { という関数を定義。その関数のなかで $default_charset = `nkf -g $charset_file_path`; のように、nkfにファイルの文字コードを判別させて返り値を取得 そして $file_contents = mb_convert_encoding($file_contents, $char_set, $default_charset); のように、nkf推測文字コードと出力文字コードを指定してmb_convert_encodingで文字コード変換 てな感じです。 別解:ファイルアップロード成功後、「nkf -w ファイル名」コマンドを実行するようプログラムして強制的にUTF-8に上書き変換、という手もありますね。 参考URLが理解できればこの方法でも組めるようになるでしょう。 お好みで好きな方で。 私だったらこっちにするかな。
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
1行ごとに調べるのでは誤判別が多くなるでしょうね。file_get_contentsなどでそれなりの量を読み込んでから判断すべきです。 またmb_detect_orderが標準のままだと誤判別の元です(私の環境だと標準の状態で判別出来た例しがないです)。キチンと指定してください。 http://jp.php.net/manual/ja/function.mb-detect-order.php #ましてmb_convert_encodingの[auto]はほぼ無意味です(汗
お礼
あちこちのサイトにも記述されてましたが、やはり[auto]は無意味なんですね(笑) また、たくさんのアドバイスありがとうござました!
- yambejp
- ベストアンサー率51% (3827/7415)
厳密にいうとないです よくやられるのは先頭から数キロバイトサンプリングして 特徴的な範囲で文字が現れればその文字コードだと判定することです。 容量の小さいファイルはいずれにしろ難しいですね ファイルをアップさせるならきちんと仕様を守らせる というのが最善の対応策です
お礼
回答ありがとうございます! 今回はlinuxサーバであったため、上記の方の方法で解決することができました! ですが、windowsサーバだったら無いのでしょうね・・・。 確かに仕様を決めることが一番の解決策かもしれませんね。 ありがとうございました。
お礼
ありがとうございます! うまくいかず長い時間悩んでいたのですが、この方法で解決することができました! 本当に求めていた通りの動きが出来たので大変感謝しています。 あらためてありがとうございました。