Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • 締切済み

mb_detect_encoding()関数について

かなり初歩的な質問かもしれませんが、とあるサイトを参考に、以下のスクリプトを作って文字コードをEUC、 改行コードをLFにして保存し、実行しました。 <?php $str="PHP練習"; print mb_detect_encoding($str); ?> これを実行した結果は、 UTF-8でした。 てっきり保存した文字コードが出力されると思ったんですが違いました。ためしに今度は「$str="PHP練習";」の部分を「$str="PHP";」に してみたらASCIIと出力されました。 さらに今度は「mb_detect_encoding($str);」の部分を、 「mb_detect_encoding($str,"UTF-8");」にして実行したら、 UTF-8と出力されました。 「mb_detect_encoding($str,"SJIS");」にして実行したら、 SJISと出力されました。 あといろいろ$strの中の文字を変えたりしてみましたが、 たまに何も出力されないときもありました。 サイトの説明を見たら、「mb_detect_encoding()関数は、文字列のエンコーディング形式を検出します」と書いてありました。 この「文字列のエンコーディング形式」というのは何によって決まるのでしょうか?

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

エンコーディングを決めるのは、あらかじめ指定された順番でいくつかの エンコーディングを試していって、つじつまが合えばそれにするというものではないでしょうか。 mb_detect_order http://zapanet.info/phpdoc/function.mb-detect-order.html <?php $str="PHP練習"; print_r(mb_detect_order()); print mb_detect_encoding($str); mb_detect_order("EUC-JP,UTF-8,ASCII"); print_r(mb_detect_order()); print mb_detect_encoding($str); 最初のprint_r で、既定の検出順序を出力します。 わたしの使っているシステムでは Array ( [0] => ASCII [1] => UTF-8 ) となりました。 もしこういう設定だったとすると、どんな文字列を渡しても EUC-JPという検出はしないでしょう。 Array ( [0] => ASCII [1] => UTF-8 ) UTF-8Array ( [0] => EUC-JP [1] => UTF-8 [2] => ASCII ) EUC-JP

すると、全ての回答が全文表示されます。

関連するQ&A