mb_convert_encoding関数を利用して文字コードをSHIFT-JISからUTF-8に変換したいのですが、
なぜか文字コードが変換されません…
コードは以下のようになっています
$encType1 = mb_detect_encoding($key, "SJIS, SJIS-win");
$key = mb_convert_encoding($key, "UTF-8", $encType1);
$encType2 = mb_detect_encoding($key);
結果は変換前、後でどちらもSJISとなってしまいます。
いったい何が問題なのでしょうか?
2つ目の「mb_convert_encoding」を下記のように書き換えて下さい。
$encType2 = mb_detect_encoding($key, "auto");
"auto" を省略すると、mb_detect_order() で取得されるリストから、該当する文字コードが何かを検証します。
PHP: mb_detect_encoding - Manual
PHP: mb_detect_order - Manual
で、mb_detect_order() で得られるリストに UTF-8 が含まれていないと、同様の結果になりました。
php.ini で
mbstring.detect_order = SJIS,ASCII
として、下記のコードを実行してみます。
<?php $key = "あいうえお"; $encType1 = mb_detect_encoding($key, "SJIS, SJIS-win"); $key = mb_convert_encoding($key, "UTF-8", $encType1); $encType2 = mb_detect_encoding($key, "auto"); echo "$encType2\n"; echo "$key\n"; print_r(mb_detect_order()); echo "\n"; ?>
このファイルの文字コードを Shift_JIS として保存して実行すると、
UTF-8 あいうえお Array ( [0] => SJIS [1] => ASCII )
となります。この状態で "auto" を外して、
<?php $key = "あいうえお"; $encType1 = mb_detect_encoding($key, "SJIS, SJIS-win"); $key = mb_convert_encoding($key, "UTF-8", $encType1); $encType2 = mb_detect_encoding($key); echo "$encType2\n"; echo "$key\n"; print_r(mb_detect_order()); echo "\n"; ?>
として実行すると、
SJIS あいうえお Array ( [0] => SJIS [1] => ASCII )
となりました。