• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの文字コードを調べるには?(php))

ファイルの文字コードを調べる方法【php】

このQ&Aのポイント
  • phpでファイルの文字コードを調べる方法を知りたいです。アップロードしたファイルの文字コードを確認して、適切なエンコードを行いたいです。
  • shift-jisでエンコードされたファイルを読み込んでいますが、全てのファイルがそうとは限りません。ファイルの文字コードを調べる方法について教えてください。
  • 文字化けを起こさずにアップロードしたファイルの文字コードを調べたいです。[auto]を試したところ文字化けが発生しました。他の方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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が理解できればこの方法でも組めるようになるでしょう。 お好みで好きな方で。 私だったらこっちにするかな。

参考URL:
http://www.omnioo.com/omnioolab/php/post-93.php
non05410
質問者

お礼

ありがとうございます! うまくいかず長い時間悩んでいたのですが、この方法で解決することができました! 本当に求めていた通りの動きが出来たので大変感謝しています。 あらためてありがとうございました。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

1行ごとに調べるのでは誤判別が多くなるでしょうね。file_get_contentsなどでそれなりの量を読み込んでから判断すべきです。 またmb_detect_orderが標準のままだと誤判別の元です(私の環境だと標準の状態で判別出来た例しがないです)。キチンと指定してください。 http://jp.php.net/manual/ja/function.mb-detect-order.php #ましてmb_convert_encodingの[auto]はほぼ無意味です(汗

non05410
質問者

お礼

あちこちのサイトにも記述されてましたが、やはり[auto]は無意味なんですね(笑) また、たくさんのアドバイスありがとうござました!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

厳密にいうとないです よくやられるのは先頭から数キロバイトサンプリングして 特徴的な範囲で文字が現れればその文字コードだと判定することです。 容量の小さいファイルはいずれにしろ難しいですね ファイルをアップさせるならきちんと仕様を守らせる というのが最善の対応策です

non05410
質問者

お礼

回答ありがとうございます! 今回はlinuxサーバであったため、上記の方の方法で解決することができました! ですが、windowsサーバだったら無いのでしょうね・・・。 確かに仕様を決めることが一番の解決策かもしれませんね。 ありがとうございました。

関連するQ&A