作成日: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」は不要と思う。