lukeusher / forceutf8
PHP类编码,具有流行的Encoding::toUTF8()函数--之前称为forceUTF8()--可以修复混合编码的字符串。
v2.0.5
2022-04-05 08:31 UTC
Requires
- php: >=5.3.0
README
PHP类编码,具有流行的\ForceUTF8\Encoding::toUTF8()函数--之前称为forceUTF8()--可以修复混合编码的字符串。
描述
如果你将PHP函数utf8_encode()应用于已经是UTF8的字符串,它将返回一个混乱的UTF8字符串。
此类解决了此问题,并提供了一个名为\ForceUTF8\Encoding::toUTF8()的便捷静态函数。
你不需要知道你的字符串的编码是什么。它可以是Latin1 (ISO 8859-1)、Windows-1252或UTF8,或者字符串可以包含它们的混合。\ForceUTF8\Encoding::toUTF8()将所有内容转换为UTF8。
有时你必须处理编码不可靠的服务,可能将UTF8和Latin1混合在同一字符串中。
更新
我包含了一个名为\ForceUTF8\Encoding::fixUTF8()的另一个函数,该函数可以修复看起来混乱的双重(或多次)编码的UTF8字符串。
用法
use \ForceUTF8\Encoding;
$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = Encoding::toLatin1($utf8_or_latin1_or_mixed_string);
还
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
示例
use \ForceUTF8\Encoding;
echo Encoding::fixUTF8("Fédération Camerounaise de Football\n");
echo Encoding::fixUTF8("Fédération Camerounaise de Football\n");
echo Encoding::fixUTF8("Fédération Camerounaise de Football\n");
echo Encoding::fixUTF8("Fédération Camerounaise de Football\n");
将输出
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
选项
默认情况下,Encoding::fixUTF8
将使用Encoding::WITHOUT_ICONV
标志,表示不应使用iconv修复混乱的UTF8字符串。
此类还提供了iconv处理的选项,例如Encoding::ICONV_TRANSLIT
和Encoding::ICONV_IGNORE
,当使用iconv类时启用这些标志。这些标志的功能在PHP iconv文档中有说明。
示例
use \ForceUTF8\Encoding;
$str = "Fédération Camerounaise—de—Football\n"; // Uses U+2014 which is invalid ISO8859-1 but exists in Win1252
echo Encoding::fixUTF8($str); // Will break U+2014
echo Encoding::fixUTF8($str, Encoding::ICONV_IGNORE); // Will preserve U+2014
echo Encoding::fixUTF8($str, Encoding::ICONV_TRANSLIT); // Will preserve U+2014
将输出
Fédération Camerounaise?de?Football
Fédération Camerounaise—de—Football
Fédération Camerounaise—de—Football
而
use \ForceUTF8\Encoding;
$str = "čęėįšųūž"; // Uses several characters not present in ISO8859-1 / Win1252
echo Encoding::fixUTF8($str); // Will break invalid characters
echo Encoding::fixUTF8($str, Encoding::ICONV_IGNORE); // Will remove invalid characters, keep those present in Win1252
echo Encoding::fixUTF8($str, Encoding::ICONV_TRANSLIT); // Will trasliterate invalid characters, keep those present in Win1252
将输出
????????
šž
ceeišuuž
通过composer安装
编辑你的composer.json文件以包含以下内容
{ "require": { "neitanod/forceutf8": "~2.0" } }
提示
如果你想,可以用比特币给我小费。 :)