Если вы примените utf8_encode()
к уже строке UTF8, она вернет искаженный вывод UTF8.
Я сделал функцию, которая решает все эти проблемы. Называется Encoding::toUTF8()
.
Вам не нужно знать, какова кодировка ваших строк. Это может быть Latin1 (ISO8859-1), Windows-1252 или UTF8, или в строке может быть их сочетание. Encoding::toUTF8()
преобразует все в UTF8.
Я сделал это, потому что служба давала мне все данные, перепутанные, смешивая эти кодировки в одной строке.
Использование:
require_once('Encoding.php');
use \ForceUTF8\Encoding; // It's namespaced now.
$utf8_string = Encoding::toUTF8($mixed_string);
$latin1_string = Encoding::toLatin1($mixed_string);
Я включил еще одну функцию, Encoding :: fixUTF8 (), которая будет фиксировать каждую строку UTF8, которая выглядит искаженным продуктом, будучи зашифрованной в UTF8 несколько раз.
Использование:
require_once('Encoding.php');
use \ForceUTF8\Encoding; // It's namespaced now.
$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
Скачать:
https://github.com/neitanod/forceutf8