PHPでテキストファイルの文字コードを変換する

(1/1)
PHPでテキストファイルの文字コードを変換する
Webの世界では、データ交換などの都合で、文字コードとしてUTF-8が標準になりつつある。
そこで今回は、シフトJIS、EUC-JP、JISで書かれているテキストファイルを UTF-8 に変換するプログラムを作ることにする。PHPを使うと、ローカルディスクにあるテキストファイルの文字コードを比較的簡単に、他のコードに変換することができる。

(2023年5月4日)HTMLヘッダの修正,解説記事に加筆.

目次

サンプル・プログラム

圧縮ファイルの内容
conv_utf8.phpサンプル・プログラム本体。
sjis.txtサンプル・テキスト(シフトJIS)。
conv_utf8.php 更新履歴
バージョン 更新日 内容
1.2.1 2021/02/06 HTMLヘッダの修正,等
1.2 2021/02/06 PHP8対応
1.1 2015/10/25 ソース改善
1.0 2008/07/05 初版
file タグヒアドキュメントおよび変数 $_FILES については、「PHPでCSV形式ファイルを読み込んで表にする」を参照してほしい。

解説:前準備

  25: //変換結果を保存するディレクトリ
  26: define('PATH_NAME', 'C:/');
  27: 
  28: //変換後の改行コード
  29: define('NL', "\n");

変換結果を保管するディレクトリ名を定数 PATH_NAME に指定する。
変数 $_FILES からは、ダイアログで指定したディレクトリ名を取得することができないため、このような変数を用意した。

変換後の改行コードを定数 NL に指定する。
ここではUNIXで通常用いられるLFコード(0x0A)にしてある。

解説:文字コード変換

  75: /**
  76:  * テキストファイルの文字コードを変換し保存する
  77:  * @param   string $infname  入力ファイル名
  78:  * @param   string $incode   入力ファイルの文字コード
  79:  * @param   string $outfname 出力ファイル名
  80:  * @param   string $outcode  出力ファイルの文字コード
  81:  * @param   string $nl       出力ファイルの改行コード
  82:  * @return  string メッセージ
  83: */
  84: function convertCode($infname, $incode, $outfname, $outcode, $nl) {
  85:     $instr = @file_get_contents($infname);
  86:     if ($instr == FALSE) {
  87:         return "変換失敗:{$infname} が見あたりません.";
  88:     }
  89:     $outstr = mb_convert_encoding($instr, $outcode, $incode);
  90:     $outstr = str_replace(array("\r\n", "\n", "\r"), $nl, $outstr);
  91: 
  92:     $outfp = fopen($outfname, 'wb');
  93:     if ($outfp == FALSE) {
  94:         return "変換失敗:{$outfname} に書き込むことができません.";
  95:     }
  96:     fwrite($outfp, $outstr);
  97:     fclose($outfp);
  98: 
  99:     return "変換成功:{$infname} => {$outfname}";
 100: }

PHPには文字コードを変換するための関数  mb_convert_encoding  が用意されている。
この関数を利用し、入/出力ファイル名、入/出力文字コード、および出力改行文字を指定することでテキストファイルの文字コード変換を行うユーザー関数 convertCode を用意した。

関数  file_get_contents  を使って一気にテキストファイルを読み込む。
続いて、関数  mb_convert_encoding で文字コードを変換する。このとき、変換元を "auto" と指定すると、変換元の文字コードを自動識別してくれる。ただし、自動識別に失敗するケースもあるので注意してほしい。

次に、関数  str_replace  を使って改行コードを変換する。

最後に、関数  fopen 、 fwrite 、 fclose  を使って変換したファイルを保管する。
PHP5以上であれば、関数  file_put_contents  を使って一気に書き込むことができる。

参考サイト

(この項おわり)
header