[ Index ]

PHP Cross Reference of phpBB-3.2.11-deutsch

title

Body

[close]

/vendor/zendframework/zend-stdlib/src/ -> StringUtils.php (source)

   1  <?php
   2  /**
   3   * Zend Framework (http://framework.zend.com/)
   4   *
   5   * @link      http://github.com/zendframework/zf2 for the canonical source repository
   6   * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
   7   * @license   http://framework.zend.com/license/new-bsd New BSD License
   8   */
   9  
  10  namespace Zend\Stdlib;
  11  
  12  use Zend\Stdlib\StringWrapper\StringWrapperInterface;
  13  
  14  /**
  15   * Utility class for handling strings of different character encodings
  16   * using available PHP extensions.
  17   *
  18   * Declared abstract, as we have no need for instantiation.
  19   */
  20  abstract class StringUtils
  21  {
  22      /**
  23       * Ordered list of registered string wrapper instances
  24       *
  25       * @var StringWrapperInterface[]
  26       */
  27      protected static $wrapperRegistry = null;
  28  
  29      /**
  30       * A list of known single-byte character encodings (upper-case)
  31       *
  32       * @var string[]
  33       */
  34      protected static $singleByteEncodings = array(
  35          'ASCII', '7BIT', '8BIT',
  36          'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5',
  37          'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10',
  38          'ISO-8859-11', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
  39          'CP-1251', 'CP-1252',
  40          // TODO
  41      );
  42  
  43      /**
  44       * Is PCRE compiled with Unicode support?
  45       *
  46       * @var bool
  47       **/
  48      protected static $hasPcreUnicodeSupport = null;
  49  
  50      /**
  51       * Get registered wrapper classes
  52       *
  53       * @return string[]
  54       */
  55      public static function getRegisteredWrappers()
  56      {
  57          if (static::$wrapperRegistry === null) {
  58              static::$wrapperRegistry = array();
  59  
  60              if (extension_loaded('intl')) {
  61                  static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Intl';
  62              }
  63  
  64              if (extension_loaded('mbstring')) {
  65                  static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\MbString';
  66              }
  67  
  68              if (extension_loaded('iconv')) {
  69                  static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Iconv';
  70              }
  71  
  72              static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Native';
  73          }
  74  
  75          return static::$wrapperRegistry;
  76      }
  77  
  78      /**
  79       * Register a string wrapper class
  80       *
  81       * @param string $wrapper
  82       * @return void
  83       */
  84      public static function registerWrapper($wrapper)
  85      {
  86          $wrapper = (string) $wrapper;
  87          if (!in_array($wrapper, static::$wrapperRegistry, true)) {
  88              static::$wrapperRegistry[] = $wrapper;
  89          }
  90      }
  91  
  92      /**
  93       * Unregister a string wrapper class
  94       *
  95       * @param string $wrapper
  96       * @return void
  97       */
  98      public static function unregisterWrapper($wrapper)
  99      {
 100          $index = array_search((string) $wrapper, static::$wrapperRegistry, true);
 101          if ($index !== false) {
 102              unset(static::$wrapperRegistry[$index]);
 103          }
 104      }
 105  
 106      /**
 107       * Reset all registered wrappers so the default wrappers will be used
 108       *
 109       * @return void
 110       */
 111      public static function resetRegisteredWrappers()
 112      {
 113          static::$wrapperRegistry = null;
 114      }
 115  
 116      /**
 117       * Get the first string wrapper supporting the given character encoding
 118       * and supports to convert into the given convert encoding.
 119       *
 120       * @param string      $encoding        Character encoding to support
 121       * @param string|null $convertEncoding OPTIONAL character encoding to convert in
 122       * @return StringWrapperInterface
 123       * @throws Exception\RuntimeException If no wrapper supports given character encodings
 124       */
 125      public static function getWrapper($encoding = 'UTF-8', $convertEncoding = null)
 126      {
 127          foreach (static::getRegisteredWrappers() as $wrapperClass) {
 128              if ($wrapperClass::isSupported($encoding, $convertEncoding)) {
 129                  $wrapper = new $wrapperClass($encoding, $convertEncoding);
 130                  $wrapper->setEncoding($encoding, $convertEncoding);
 131                  return $wrapper;
 132              }
 133          }
 134  
 135          throw new Exception\RuntimeException(
 136              'No wrapper found supporting "' . $encoding . '"'
 137              . (($convertEncoding !== null) ? ' and "' . $convertEncoding . '"' : '')
 138          );
 139      }
 140  
 141      /**
 142       * Get a list of all known single-byte character encodings
 143       *
 144       * @return string[]
 145       */
 146      public static function getSingleByteEncodings()
 147      {
 148          return static::$singleByteEncodings;
 149      }
 150  
 151      /**
 152       * Check if a given encoding is a known single-byte character encoding
 153       *
 154       * @param string $encoding
 155       * @return bool
 156       */
 157      public static function isSingleByteEncoding($encoding)
 158      {
 159          return in_array(strtoupper($encoding), static::$singleByteEncodings);
 160      }
 161  
 162      /**
 163       * Check if a given string is valid UTF-8 encoded
 164       *
 165       * @param string $str
 166       * @return bool
 167       */
 168      public static function isValidUtf8($str)
 169      {
 170          return is_string($str) && ($str === '' || preg_match('/^./su', $str) == 1);
 171      }
 172  
 173      /**
 174       * Is PCRE compiled with Unicode support?
 175       *
 176       * @return bool
 177       */
 178      public static function hasPcreUnicodeSupport()
 179      {
 180          if (static::$hasPcreUnicodeSupport === null) {
 181              ErrorHandler::start();
 182              static::$hasPcreUnicodeSupport = defined('PREG_BAD_UTF8_OFFSET_ERROR') && preg_match('/\pL/u', 'a') == 1;
 183              ErrorHandler::stop();
 184          }
 185          return static::$hasPcreUnicodeSupport;
 186      }
 187  }


Generated: Wed Nov 11 20:33:01 2020 Cross-referenced by PHPXref 0.7.1