relisten/forceutf8

PHP 类编码,具有流行的 Encoding::toUTF8() 函数 --之前称为 forceUTF8()-- 用于修复混合编码的字符串。

1.1.0 2023-12-08 16:34 UTC

This package is auto-updated.

Last update: 2024-09-08 18:09:07 UTC


README

PHP 类编码,具有流行的 \ForceUTF8\Encoding::toUTF8() 函数 --之前称为 forceUTF8()-- 用于修复混合编码的字符串。

分支

此包是 neitanod/forceutf8 库的分支,添加了对 PHP 7.0 及更高版本的支持。

此分支

  • 修复了 PHP 新版本中的弃用功能

描述

如果您将 PHP 函数 utf8_encode() 应用于已经 UTF8 编码的字符串,它将返回一个乱码的 UTF8 字符串。

此类解决了此问题,并提供了一个名为 \ForceUTF8\Encoding::toUTF8() 的便捷静态函数。

您不需要知道字符串的编码方式。它可以是大写字母1(ISO 8859-1)、Windows-1252 或 UTF8,或者字符串可以包含它们的混合。\ForceUTF8\Encoding::toUTF8() 将将所有内容转换为 UTF8。

有时您必须处理编码不可靠的服务,可能是在同一字符串中混合 UTF8 和大写字母1。

更新

我包含了一个名为 \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_TRANSLITEncoding::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": {
        "relisten/forceutf8": "~1.0"
    }
}