人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpの文字コンバート処理について質問です
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となってしまいます。
いったい何が問題なのでしょうか?

●質問者: k-motoyan
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
ベストアンサー

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
)

となりました。


k-motoyanさんのコメント
ありがとうございます! $encType2 = mb_detect_encoding($key,"auto"); とすることで上手く出力されるようになりました 自分で結果に該当しそうな値を設定しないといけないなんて、 あまり使い勝手がよくない関数なんですね

JULYさんのコメント
> 自分で結果に該当しそうな値を設定しないといけないなんて、 > あまり使い勝手がよくない関数なんですね というよりは、"auto" を指定しないと、php.ini で指定したか、もしくは、mb_detect_order() で設定した対象文字コードに限定して、その中から推定する、というのが、ちょっと「落とし穴」のような感じです。 特に指定しないと、扱えるすべてのコードから、のように思ってしまうけど、実は違う。なので、一番簡単なのは "auto" を指定する方法でしょう。 まぁ、文字コードの推定って、あくまでも「推定」なので、想定する文字コードをあらかじめ絞っておいた方が、処理的に有利に働くとは思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ