ブロサイ
2024.07.09

【PHP】DATファイルを自動生成しサイトに表示させる際に文字化けする場合の対処方法

部屋の利用状況や機械の稼働状況を把握するために、PHPでCSVにデータを書き込み、必要な情報をDAT(データ)ファイルに保存、DATファイルに表示した情報をサイトに表示することがあります。

このコードを作った際に環境によって文字コードが異なってしまい、サイト上で文字化けして表示されてしまうことがあります。もしDATファイルを生成するのが最初の1回のみであれば、テキストエディタで開き、文字コードを変えて上書きすれば簡単に直すことができますが、CSVファイルを数時間置きに自動生成し、リアルタイムで状況を把握できるようなシステムを作る場合は、phpコードを修正する必要があります。そのような場合は、下記で紹介する方法で改善できると思いますので、参考にしてみてください。

DATファイルの文字化けを回避するためのコード

DATファイルの文字化けを回避するには下記コードをphpに記述します。

$DatFilePath = "room_status.dat"; //最初に生成されるdatファイル(文字化けする)

$outputPath = 'output_roomst.dat'; //文字化けを解消したdatファイル
$fileContent = file_get_contents($DatFilePath);
$utf8Content = mb_convert_encoding($fileContent, 'UTF-8', 'Shift_JIS');
//文字化けしたdatファイルを指定の文字コードに書き換え
file_put_contents($outputPath, $utf8Content);


//------------ 以下、処理の記述 ---------------

上記のようなコードを1行目にあるdatファイルの読み込みの記述下辺りに記載します。

※1行目の記述が既にphpに記載されている場合は、上記記述の1行目は無視してください。

1行目より下の記述を一つずつ説明します。

  • 3行目「$outputPath…」:文字化け解消後の再生成されるdatファイルのパス指定※ファイル名は適宜変更してください。
  • 4行目「$fileContent」:1行目のdatファイルの内容を取得
  • 5行目「$utf8Content…」:「mb_convert_encoding(変換するファイル・文字列,エンコード後の文字コード,エンコード対象の文字コード)」
  • 7行目「file_put_contents…」:5行目のエンコード内容を新しいdatファイルに反映させる

上記の記述を追加することで、エンコードされたdatファイルが新たに1つサーバーの指定階層に生成されます。
また、5行目の

mb_convert_encoding(変換するファイル・文字列,エンコード後の文字コード,エンコード対象の文字コード);

エンコード前後の文字コードはご自身の環境に合わせて正しいものを設定してください。

関連する記事