PHPで文字化けを解消する方法(mb_convert_encoding)
file_get_contents()でファイルからデータを読み込む際やWebサイトからデータを読み込む際に文字化けした時の対処法をご紹介したいと思います。
文字化けが起こる原因
原因としては異なる文字コードが1つのファイルに混在した場合に起こります。
例としては、PHPスクリプトがUTF-8で書かれていて読み込むファイルがシフトJISだった場合、文字化けが起こります。
対処法
文字コードを統一することで文字化けは解消されます。
読み込みのファイルをUTF-8に変更して保存すれば、変更できない場合はPHPの処理でUTF-8に変更してあげると文字化けが解消されます。
<?php
$moji_data= file_get_contents('./mojibake.txt'); // Shift_JISファイルの読み込み
$str = mb_convert_encoding($moji_data,"utf-8","sjis"); // Shift_JISをUTF-8に変換し文字化けを解消
?>
それでも文字化けする場合
シフトJISの場合、sjisではなくsjis-winを指定すると解消されることがあります。
sjis-winはWindowsで使われているシフトJISです。
また、オンラインのツールでも文字化けの解析ツールや各種エンコード、デコードなどができるサービスがあるのでまずは手動で原因の調査、どういう対応をすれば文字化けが解消されるのか調べてみると良いと思います。
まとめ
昔、商品管理システムの保守でプロジェクトに参画していた時にデータが取り込まれていないと大騒ぎになったことがありました。
ファイルを自動で取り込み、キーワードを探知して管理画面上に反映させるシステムでしたが、文字化けが起きていたために取り込まれていませんでした。
原因がわかれば早いのですが、今まで安定して動いていたのと特に改修も行なっておらず、その時は訳がわからずといった感じでした。
とりあえずログを設置し再度、ファイルを取り込んでみると文字化けをしているということがわかったので無事対処できました。
PHPでのログの設置方法なども機会があれば今後取り上げていこうと思います。
このカテゴリの最新記事
2023.11.09
2024.02.02
2024.09.13
2023.04.07