这是我对类似问题给出的另一个答案的转录:
如果将 utf8_encode() 应用于已经是 UTF8 的字符串,它将返回一个乱码的 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()。