sailenicolas/forceutf8

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

v3.0.0 2022-05-06 16:23 UTC

This package is auto-updated.

Last update: 2024-09-08 03:01:12 UTC


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字符串。

通过composer安装

composer require sailenicolas/forceutf8

用法

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_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

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ž