[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

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

   1  <?php
   2  
   3  namespace Algo26\IdnaConvert\EncodingHelper;
   4  
   5  class ToUtf8 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_encode($sourceString);
  30          }
  31  
  32          if ($this->encoding === 'WINDOWS-1252') {
  33              return utf8_encode($this->mapWindows1252ToIso8859_1($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 Win1252
  53       *
  54       * @return string  The resulting ISO-8859-1 string
  55       * @since 0.0.1
  56       */
  57      private function mapWindows1252ToIso8859_1($string = '')
  58      {
  59          $return = '';
  60          for ($i = 0; $i < strlen($string); ++$i) {
  61              $codePoint = ord($string[$i]);
  62              switch ($codePoint) {
  63                  case 129:
  64                      $return .= chr(252);
  65                      break;
  66                  case 132:
  67                      $return .= chr(228);
  68                      break;
  69                  case 142:
  70                      $return .= chr(196);
  71                      break;
  72                  case 148:
  73                      $return .= chr(246);
  74                      break;
  75                  case 153:
  76                      $return .= chr(214);
  77                      break;
  78                  case 154:
  79                      $return .= chr(220);
  80                      break;
  81                  case 225:
  82                      $return .= chr(223);
  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, 'UTF-8', $this->encoding);
  96              if (false !== $converted) {
  97                  return $converted;
  98              }
  99          }
 100  
 101          if (function_exists('iconv')) {
 102              $converted = @iconv($this->encoding, 'UTF-8', $string);
 103              if (false !== $converted) {
 104                  return $converted;
 105              }
 106          }
 107  
 108          if (function_exists('libiconv')) {
 109              $converted = @libiconv($this->encoding, 'UTF-8', $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