ラボ > PHP:文字関連

php 文字コードの調査と変換(mb_convert_encoding())

文字コードの変換と変換するための元の文字コードの調査について

作成日:2017-11-28, 更新日:2018-02-22

文字コードの変換:mb_convert_encoding()

echo mb_convert_encoding(文字列, 変換後の文字コード, 変換前の文字コード);

変換前の文字コードが分からない

「auto」を使う

echo mb_convert_encoding(文字列, 変換後の文字コード, 'auto');

※「auto」でもダメなときがある。

まとめて書く

echo mb_convert_encoding(文字列, 変換後の文字コード, 'ASCII,JIS,UTF-8,eucJP-win,SJIS-win');

※「eucJP-win」「SJIS-win」は日本語の特殊文字「①㈱みたいなヤツら」も対象になる

注意:文字化けする場合

上記でちょっぴり記述しているが、「eucJP-win」と「EUC-JP」、「SJIS-win」と「SJIS」の指定違いで文字化けを起こす。

「SJIS-win」じゃないとダメなのに「SJIS」指定していて、文字化けを起こす感じ。

文字コードの調査

そんな便利な関数は無さげ。「適当な文字コードで変換→変換前と変換後が同じなら正解」的な感じで調べる。
→見つかった(2018/02/22:PHP 文字コードの確認(mb_detect_encoding())

※下記だと「SJIS-win」と「SJIS」のどちらが正解なのかまでは分からない

function checkEncode($str){
  $charArys = array('UTF-8', 'eucJP-win', 'SJIS-win', 'ASCII', 'EUC-JP', 'SJIS', 'JIS');
  foreach ($charArys as $charset){
    if ( $str == mb_convert_encoding($str, $charset, $charset) ){
      return $charset;
    }
  }
  return $charset;
}

$str = file_get_contents(〇〇〇〇);
echo '取得したファイルの文字コード:' . checkEncode($str);

※「eucJP-win、SJIS-win」があるなら「EUC-JP、SJIS」は不要と思う。

関連項目

PHP 文字コードの確認(mb_detect_encoding())