fyLax / forceutf8
PHP 类编码,具有流行的 Encoding::toUTF8() 函数 --之前称为 forceUTF8()-- 用于修复混合编码的字符串。
Requires
- php: ^7.0 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.6
Suggests
- ext-iconv: To convert non-UTF-8 strings to UTF-8
- ext-mbstring: To convert non-UTF-8 strings to UTF-8
This package is auto-updated.
Last update: 2024-09-06 13:02:14 UTC
README
PHP 类编码,具有流行的 \ForceUTF8\Encoding::toUTF8() 函数 --之前称为 forceUTF8()-- 用于修复混合编码的字符串。
分支
此包是 neitanod/forceutf8
库的分支,增加了对 PHP 7.0 及更高版本的支持。
此分支
- 修复了新版本 PHP 的弃用问题
描述
如果您将 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);
also
$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
while
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": { "fylax/forceutf8": "~1.0" } }