dポイントプレゼントキャンペーン実施中!

かなり初歩的な質問かもしれませんが、とあるサイトを参考に、以下のスクリプトを作って文字コードを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()関数は、文字列のエンコーディング形式を検出します」と書いてありました。
この「文字列のエンコーディング形式」というのは何によって決まるのでしょうか?

A 回答 (1件)

エンコーディングを決めるのは、あらかじめ指定された順番でいくつかの


エンコーディングを試していって、つじつまが合えばそれにするというものではないでしょうか。

mb_detect_order
http://zapanet.info/phpdoc/function.mb-detect-or …

<?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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!