[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/algo26-matthias/idna-convert/src/EncodingHelper/ -> FromUtf8.php (source)

   1  <?php
   2  
   3  namespace Algo26\IdnaConvert\EncodingHelper;
   4  
   5  class FromUtf8 implements EncodingHelperInterface
   6  {
   7      private const DEFAULT_ENCODING = 'ISO-8859-1';
   8  
   9      private $encoding = self::DEFAULT_ENCODING;
  10  
  11      public function convert(
  12          string $sourceString,
  13          ?string $encoding = self::DEFAULT_ENCODING,
  14          ?bool $safeMode = false
  15      ) {
  16          $safe = ($safeMode) ? $sourceString : false;
  17  
  18          if ($encoding !== null) {
  19              $this->encoding = strtoupper($encoding);
  20          } else {
  21              $this->encoding = 'ISO-8859-1';
  22          }
  23  
  24          if ($this->encoding === 'UTF-8' || $this->encoding === 'UTF8') {
  25              return $sourceString;
  26          }
  27  
  28          if ($this->encoding === 'ISO-8859-1') {
  29              return utf8_decode($sourceString);
  30          }
  31  
  32          if ($this->encoding === 'WINDOWS-1252') {
  33              return self::mapIso8859_1ToWindows1252(utf8_decode($sourceString));
  34          }
  35  
  36          if ($this->encoding === 'UNICODE-1-1-UTF-7') {
  37              $this->encoding = 'UTF-7';
  38          }
  39  
  40          $converted = $this->convertWithLibraries($sourceString);
  41          if (false !== $converted) {
  42              return $converted;
  43          }
  44  
  45          return $safe;
  46      }
  47  
  48      /**
  49       * Special treatment for our guys in Redmond
  50       * Windows-1252 is basically ISO-8859-1 -- with some exceptions, which get dealt with here
  51       *
  52       * @param  string $string Your input in ISO-8859-1
  53       *
  54       * @return  string  The resulting Win1252 string
  55       * @since 0.0.1
  56       */
  57      private function mapIso8859_1ToWindows1252($string = '')
  58      {
  59          $return = '';
  60          for ($i = 0; $i < strlen($string); ++$i) {
  61              $codePoint = ord($string[$i]);
  62              switch ($codePoint) {
  63                  case 196:
  64                      $return .= chr(142);
  65                      break;
  66                  case 214:
  67                      $return .= chr(153);
  68                      break;
  69                  case 220:
  70                      $return .= chr(154);
  71                      break;
  72                  case 223:
  73                      $return .= chr(225);
  74                      break;
  75                  case 228:
  76                      $return .= chr(132);
  77                      break;
  78                  case 246:
  79                      $return .= chr(148);
  80                      break;
  81                  case 252:
  82                      $return .= chr(129);
  83                      break;
  84                  default:
  85                      $return .= chr($codePoint);
  86              }
  87          }
  88  
  89          return $return;
  90      }
  91  
  92      private function convertWithLibraries(string $string): ?string
  93      {
  94          if (function_exists('mb_convert_encoding')) {
  95              $converted = @mb_convert_encoding($string, $this->encoding, 'UTF-8');
  96              if (false !== $converted) {
  97                  return $converted;
  98              }
  99          }
 100  
 101          if (function_exists('iconv')) {
 102              $converted = @iconv('UTF-8', $this->encoding, $string);
 103              if (false !== $converted) {
 104                  return $converted;
 105              }
 106          }
 107  
 108          if (function_exists('libiconv')) {
 109              $converted = @libiconv('UTF-8', $this->encoding, $string);
 110              if (false !== $converted) {
 111                  return $converted;
 112              }
 113          }
 114  
 115          return false;
 116      }
 117  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer