primo commit

This commit is contained in:
2024-12-17 17:34:10 +01:00
commit e650f8df99
16435 changed files with 2451012 additions and 0 deletions

View File

@ -0,0 +1,12 @@
<?php
namespace Algo26\IdnaConvert\EncodingHelper;
interface EncodingHelperInterface
{
public function convert(
string $sourceString,
string $encoding = 'ISO-8859-1',
bool $safeMode = false
);
}

View File

@ -0,0 +1,117 @@
<?php
namespace Algo26\IdnaConvert\EncodingHelper;
class FromUtf8 implements EncodingHelperInterface
{
private const DEFAULT_ENCODING = 'ISO-8859-1';
private $encoding = self::DEFAULT_ENCODING;
public function convert(
string $sourceString,
?string $encoding = self::DEFAULT_ENCODING,
?bool $safeMode = false
) {
$safe = ($safeMode) ? $sourceString : false;
if ($encoding !== null) {
$this->encoding = strtoupper($encoding);
} else {
$this->encoding = 'ISO-8859-1';
}
if ($this->encoding === 'UTF-8' || $this->encoding === 'UTF8') {
return $sourceString;
}
if ($this->encoding === 'ISO-8859-1') {
return utf8_decode($sourceString);
}
if ($this->encoding === 'WINDOWS-1252') {
return self::mapIso8859_1ToWindows1252(utf8_decode($sourceString));
}
if ($this->encoding === 'UNICODE-1-1-UTF-7') {
$this->encoding = 'UTF-7';
}
$converted = $this->convertWithLibraries($sourceString);
if (false !== $converted) {
return $converted;
}
return $safe;
}
/**
* Special treatment for our guys in Redmond
* Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get dealt with here
*
* @param string $string Your input in ISO-8859-1
*
* @return string The resulting Win1252 string
* @since 0.0.1
*/
private function mapIso8859_1ToWindows1252($string = '')
{
$return = '';
for ($i = 0; $i < strlen($string); ++$i) {
$codePoint = ord($string[$i]);
switch ($codePoint) {
case 196:
$return .= chr(142);
break;
case 214:
$return .= chr(153);
break;
case 220:
$return .= chr(154);
break;
case 223:
$return .= chr(225);
break;
case 228:
$return .= chr(132);
break;
case 246:
$return .= chr(148);
break;
case 252:
$return .= chr(129);
break;
default:
$return .= chr($codePoint);
}
}
return $return;
}
private function convertWithLibraries(string $string): ?string
{
if (function_exists('mb_convert_encoding')) {
$converted = @mb_convert_encoding($string, $this->encoding, 'UTF-8');
if (false !== $converted) {
return $converted;
}
}
if (function_exists('iconv')) {
$converted = @iconv('UTF-8', $this->encoding, $string);
if (false !== $converted) {
return $converted;
}
}
if (function_exists('libiconv')) {
$converted = @libiconv('UTF-8', $this->encoding, $string);
if (false !== $converted) {
return $converted;
}
}
return false;
}
}

View File

@ -0,0 +1,117 @@
<?php
namespace Algo26\IdnaConvert\EncodingHelper;
class ToUtf8 implements EncodingHelperInterface
{
private const DEFAULT_ENCODING = 'ISO-8859-1';
private $encoding = self::DEFAULT_ENCODING;
public function convert(
string $sourceString,
?string $encoding = self::DEFAULT_ENCODING,
?bool $safeMode = false
) {
$safe = ($safeMode) ? $sourceString : false;
if ($encoding !== null) {
$this->encoding = strtoupper($encoding);
} else {
$this->encoding = 'ISO-8859-1';
}
if ($this->encoding === 'UTF-8' || $this->encoding === 'UTF8') {
return $sourceString;
}
if ($this->encoding === 'ISO-8859-1') {
return utf8_encode($sourceString);
}
if ($this->encoding === 'WINDOWS-1252') {
return utf8_encode($this->mapWindows1252ToIso8859_1($sourceString));
}
if ($this->encoding === 'UNICODE-1-1-UTF-7') {
$this->encoding = 'UTF-7';
}
$converted = $this->convertWithLibraries($sourceString);
if (false !== $converted) {
return $converted;
}
return $safe;
}
/**
* Special treatment for our guys in Redmond
* Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get dealt with here
*
* @param string $string Your input in Win1252
*
* @return string The resulting ISO-8859-1 string
* @since 0.0.1
*/
private function mapWindows1252ToIso8859_1($string = '')
{
$return = '';
for ($i = 0; $i < strlen($string); ++$i) {
$codePoint = ord($string[$i]);
switch ($codePoint) {
case 129:
$return .= chr(252);
break;
case 132:
$return .= chr(228);
break;
case 142:
$return .= chr(196);
break;
case 148:
$return .= chr(246);
break;
case 153:
$return .= chr(214);
break;
case 154:
$return .= chr(220);
break;
case 225:
$return .= chr(223);
break;
default:
$return .= chr($codePoint);
}
}
return $return;
}
private function convertWithLibraries(string $string): ?string
{
if (function_exists('mb_convert_encoding')) {
$converted = @mb_convert_encoding($string, 'UTF-8', $this->encoding);
if (false !== $converted) {
return $converted;
}
}
if (function_exists('iconv')) {
$converted = @iconv($this->encoding, 'UTF-8', $string);
if (false !== $converted) {
return $converted;
}
}
if (function_exists('libiconv')) {
$converted = @libiconv($this->encoding, 'UTF-8', $string);
if (false !== $converted) {
return $converted;
}
}
return false;
}
}