You are here

Iconv.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php

File

vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php
View source
<?php

/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/zf2 for the canonical source repository
 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */
namespace Zend\Stdlib\StringWrapper;

use Zend\Stdlib\Exception;
class Iconv extends AbstractStringWrapper {

  /**
   * List of supported character sets (upper case)
   *
   * @var string[]
   * @link http://www.gnu.org/software/libiconv/
   */
  protected static $encodings = [
    // European languages
    'ASCII',
    'ISO-8859-1',
    'ISO-8859-2',
    'ISO-8859-3',
    'ISO-8859-4',
    'ISO-8859-5',
    'ISO-8859-7',
    'ISO-8859-9',
    'ISO-8859-10',
    'ISO-8859-13',
    'ISO-8859-14',
    'ISO-8859-15',
    'ISO-8859-16',
    'KOI8-R',
    'KOI8-U',
    'KOI8-RU',
    'CP1250',
    'CP1251',
    'CP1252',
    'CP1253',
    'CP1254',
    'CP1257',
    'CP850',
    'CP866',
    'CP1131',
    'MACROMAN',
    'MACCENTRALEUROPE',
    'MACICELAND',
    'MACCROATIAN',
    'MACROMANIA',
    'MACCYRILLIC',
    'MACUKRAINE',
    'MACGREEK',
    'MACTURKISH',
    'MACINTOSH',
    // Semitic languages
    'ISO-8859-6',
    'ISO-8859-8',
    'CP1255',
    'CP1256',
    'CP862',
    'MACHEBREW',
    'MACARABIC',
    // Japanese
    'EUC-JP',
    'SHIFT_JIS',
    'CP932',
    'ISO-2022-JP',
    'ISO-2022-JP-2',
    'ISO-2022-JP-1',
    // Chinese
    'EUC-CN',
    'HZ',
    'GBK',
    'CP936',
    'GB18030',
    'EUC-TW',
    'BIG5',
    'CP950',
    'BIG5-HKSCS',
    'BIG5-HKSCS:2004',
    'BIG5-HKSCS:2001',
    'BIG5-HKSCS:1999',
    'ISO-2022-CN',
    'ISO-2022-CN-EXT',
    // Korean
    'EUC-KR',
    'CP949',
    'ISO-2022-KR',
    'JOHAB',
    // Armenian
    'ARMSCII-8',
    // Georgian
    'GEORGIAN-ACADEMY',
    'GEORGIAN-PS',
    // Tajik
    'KOI8-T',
    // Kazakh
    'PT154',
    'RK1048',
    // Thai
    'ISO-8859-11',
    'TIS-620',
    'CP874',
    'MACTHAI',
    // Laotian
    'MULELAO-1',
    'CP1133',
    // Vietnamese
    'VISCII',
    'TCVN',
    'CP1258',
    // Platform specifics
    'HP-ROMAN8',
    'NEXTSTEP',
    // Full Unicode
    'UTF-8',
    'UCS-2',
    'UCS-2BE',
    'UCS-2LE',
    'UCS-4',
    'UCS-4BE',
    'UCS-4LE',
    'UTF-16',
    'UTF-16BE',
    'UTF-16LE',
    'UTF-32',
    'UTF-32BE',
    'UTF-32LE',
    'UTF-7',
    'C99',
    'JAVA',
    /* Commented out because that's internal encodings not existing in real world
            // Full Unicode, in terms of uint16_t or uint32_t (with machine dependent endianness and alignment)
            'UCS-2-INTERNAL',
            'UCS-4-INTERNAL',

            // Locale dependent, in terms of `char' or `wchar_t' (with machine dependent endianness and alignment,
            // and with OS and locale dependent semantics)
            'char',
            'wchar_t',
            '', // The empty encoding name is equivalent to "char": it denotes the locale dependent character encoding.
            */

    // When configured with the option --enable-extra-encodings,
    // it also provides support for a few extra encodings:
    // European languages
    'CP437',
    'CP737',
    'CP775',
    'CP852',
    'CP853',
    'CP855',
    'CP857',
    'CP858',
    'CP860',
    'CP861',
    'CP863',
    'CP865',
    'CP869',
    'CP1125',
    // Semitic languages
    'CP864',
    // Japanese
    'EUC-JISX0213',
    'Shift_JISX0213',
    'ISO-2022-JP-3',
    // Chinese
    'BIG5-2003',
    // (experimental)
    // Turkmen
    'TDS565',
    // Platform specifics
    'ATARIST',
    'RISCOS-LATIN1',
  ];

  /**
   * Get a list of supported character encodings
   *
   * @return string[]
   */
  public static function getSupportedEncodings() {
    return static::$encodings;
  }

  /**
   * Constructor
   *
   * @throws Exception\ExtensionNotLoadedException
   */
  public function __construct() {
    if (!extension_loaded('iconv')) {
      throw new Exception\ExtensionNotLoadedException('PHP extension "iconv" is required for this wrapper');
    }
  }

  /**
   * Returns the length of the given string
   *
   * @param string $str
   * @return int|false
   */
  public function strlen($str) {
    return iconv_strlen($str, $this
      ->getEncoding());
  }

  /**
   * Returns the portion of string specified by the start and length parameters
   *
   * @param string   $str
   * @param int      $offset
   * @param int|null $length
   * @return string|false
   */
  public function substr($str, $offset = 0, $length = null) {
    return iconv_substr($str, $offset, $length, $this
      ->getEncoding());
  }

  /**
   * Find the position of the first occurrence of a substring in a string
   *
   * @param string $haystack
   * @param string $needle
   * @param int    $offset
   * @return int|false
   */
  public function strpos($haystack, $needle, $offset = 0) {
    return iconv_strpos($haystack, $needle, $offset, $this
      ->getEncoding());
  }

  /**
   * Convert a string from defined encoding to the defined convert encoding
   *
   * @param string  $str
   * @param bool $reverse
   * @return string|false
   */
  public function convert($str, $reverse = false) {
    $encoding = $this
      ->getEncoding();
    $convertEncoding = $this
      ->getConvertEncoding();
    if ($convertEncoding === null) {
      throw new Exception\LogicException('No convert encoding defined');
    }
    if ($encoding === $convertEncoding) {
      return $str;
    }
    $fromEncoding = $reverse ? $convertEncoding : $encoding;
    $toEncoding = $reverse ? $encoding : $convertEncoding;

    // automatically add "//IGNORE" to not stop converting on invalid characters
    // invalid characters triggers a notice anyway
    return iconv($fromEncoding, $toEncoding . '//IGNORE', $str);
  }

}

Classes

Namesort descending Description
Iconv