これは、同様の質問に対して私が行った別の回答の転写です。
すでに UTF8 文字列に utf8_encode() を適用すると、文字化けした UTF8 出力が返されます。
このすべての問題に対処する関数を作成しました。これは Encoding::toUTF8() と呼ばれます。
文字列のエンコーディングが何であるかを知る必要はありません。Latin1 (iso 8859-1)、Windows-1252、または UTF8 にするか、文字列にそれらを混在させることができます。Encoding::toUTF8() はすべてを UTF8 に変換します。
これを行ったのは、あるサービスが、UTF8 と Latin1 が同じ文字列に混在している、すべてめちゃくちゃなデータのフィードを提供していたからです。
使用法:
$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = Encoding::toLatin1($utf8_or_latin1_or_mixed_string);
ダウンロード:
https://github.com/neitanod/forceutf8
アップデート:
別の関数 Encoding::fixUFT8() を含めました。文字化けしたように見えるすべての UTF8 文字列を修正します。
使用法:
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
例:
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
出力します:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
更新: 関数 (forceUTF8) を Encoding というクラスの静的関数のファミリに変換しました。新しい関数は Encoding::toUTF8() です。