HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.30
System: Linux iZj6c1151k3ad370bosnmsZ 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64
User: root (0)
PHP: 7.4.30
Disabled: NONE
Upload Files
File: //var/www/html/phpmyfaq/src/phpMyFAQ/Strings.php
<?php
// phpcs:ignoreFile

/**
 * The main string wrapper class.
 *
 * The class uses mbstring extension if available. It's strongly recommended
 * to use and extend this class instead of using direct string functions. Doing so
 * you guarantees your code is upwards compatible with UTF-8 improvements. All
 * the string methods behaviour is identical to that of the same named
 * single byte string functions.
 * This Source Code Form is subject to the terms of the Mozilla Public License,
 * v. 2.0. If a copy of the MPL was not distributed with this file, You can
 * obtain one at http://mozilla.org/MPL/2.0/.
 *
 * @package   phpMyFAQ
 * @author    Anatoliy Belsky <ab@php.net>
 * @copyright 2009-2022 phpMyFAQ Team
 * @license   http://www.mozilla.org/MPL/2.0/ Mozilla Public License Version 2.0
 * @link      https://www.phpmyfaq.de
 * @since     2009-04-06
 */

namespace phpMyFAQ;

use phpMyFAQ\Strings\Mbstring;
use phpMyFAQ\Strings\StringBasic;

/**
 * Class Strings
 *
 * @package phpMyFAQ
 */
class Strings
{
    /**
     * Instance.
     *
     * @var Mbstring|StringBasic|null
     */
    private static $instance = null;

    /**
     * Constructor.
     */
    final private function __construct()
    {
    }

    /**
     * Init.
     *
     * @param string $language Language
     */
    public static function init(string $language = 'en'): void
    {
        if (!self::$instance) {
            if (extension_loaded('mbstring') && function_exists('mb_regex_encoding')) {
                self::$instance = Mbstring::getInstance($language);
            } else {
                self::$instance = StringBasic::getInstance($language);
            }
        }
    }

    /**
     * Get current encoding.
     *
     * @return string
     */
    public static function getEncoding(): string
    {
        return self::$instance->getEncoding();
    }

    /**
     * Get string character count.
     *
     * @param string $str String
     * @return int
     */
    public static function strlen(string $str): int
    {
        return self::$instance->strlen($str);
    }

    /**
     * Get a part of string.
     *
     * @param string $string String
     * @param int $start Start
     * @param int|null $length Length
     * @return string
     */
    public static function substr(string $string, int $start, $length = 0): string
    {
        return self::$instance->substr($string, $start, $length);
    }

    /**
     * Get position of the first occurrence of a string.
     *
     * @param string $haystack Haystack
     * @param string $needle Needle
     * @param int    $offset Offset
     * @return int
     */
    public static function strpos(string $haystack, string $needle, $offset = 0): int
    {
        return self::$instance->strpos($haystack, $needle, $offset);
    }

    /**
     * Make a string lower case.
     *
     * @param string $str String
     * @return string
     */
    public static function strtolower(string $str): string
    {
        return self::$instance->strtolower($str);
    }

    /**
     * Make a string upper case.
     *
     * @param string $str String
     * @return string
     */
    public static function strtoupper(string $str): string
    {
        return self::$instance->strtoupper($str);
    }

    /**
     * Get occurrence of a string within another.
     *
     * @param string $haystack Haystack
     * @param string $needle Needle
     * @param bool   $part Part
     * @return string|false
     */
    public static function strstr(string $haystack, string $needle, $part = false)
    {
        return self::$instance->strstr($haystack, $needle, $part);
    }

    /**
     * Set current encoding.
     *
     * @param string $encoding
     */
    public static function setEncoding(string $encoding): void
    {
        self::$instance->setEncoding($encoding);
    }

    /**
     * Count substring occurrences.
     *
     * @param string $haystack
     * @param string $needle
     * @return int
     */
    public static function substr_count(string $haystack, string $needle): int // phpcs:ignore
    {
        return self::$instance->substr_count($haystack, $needle);
    }

    /**
     * Find position of last occurrence of a char in a string.
     *
     * @param string $haystack
     * @param string $needle
     * @param int    $offset
     * @return int
     */
    public static function strrpos(string $haystack, string $needle, $offset = 0): int
    {
        return self::$instance->strrpos($haystack, $needle, $offset);
    }

    /**
     * Match a regexp.
     *
     * @param string $pattern
     * @param string $subject
     * @param null   $matches
     * @param int    $flags
     * @param int    $offset
     * @return int
     */
    public static function preg_match(
        string $pattern,
        string $subject,
        &$matches = null,
        $flags = 0,
        $offset = 0
    ): int // phpcs:ignore
    {
        return self::$instance->preg_match($pattern, $subject, $matches, $flags, $offset);
    }

    /**
     * Match a regexp globally.
     *
     * @param string $pattern
     * @param string $subject
     * @param null   $matches
     * @param int    $flags
     * @param int    $offset
     * @return int
     */
    public static function preg_match_all(
        string $pattern,
        string $subject,
        &$matches = null,
        $flags = 0,
        $offset = 0
    ): int // phpcs:ignore
    {
        return self::$instance->preg_match_all($pattern, $subject, $matches, $flags, $offset);
    }

    /**
     * Split string by a regexp.
     *
     * @param string $pattern
     * @param string $subject
     * @param int    $limit
     * @param int    $flags
     * @return string[]|array|false
     */
    public static function preg_split(string $pattern, string $subject, $limit = -1, $flags = 0) // phpcs:ignore
    {
        return self::$instance->preg_split($pattern, $subject, $limit, $flags);
    }

    /**
     * Search and replace by a regexp using a callback.
     *
     * @param string $pattern
     * @param callable $callback
     * @param string|string[] $subject
     * @param int $limit
     * @param int $count
     * @return string|string[]
     */
    public static function preg_replace_callback(
        string $pattern,
        callable $callback,
        $subject,
        $limit = -1,
        &$count = 0
    ) {
        return self::$instance->preg_replace_callback($pattern, $callback, $subject, $limit, $count);
    }

    /**
     * Search and replace by a regexp.
     *
     * @param string|string[] $pattern
     * @param string|string[] $replacement
     * @param string|string[] $subject
     * @param int $limit
     * @param int $count
     * @return string|string[]|null
     */
    public static function preg_replace($pattern, $replacement, $subject, $limit = -1, &$count = 0)
    {
        return self::$instance->preg_replace($pattern, $replacement, $subject, $limit, $count);
    }

    /**
     * Convert special chars to html entities.
     *
     * @param string|null $string The input string.
     * @param int         $quoteStyle Quote style
     * @param string      $charset Character set, UTF-8 by default
     * @param bool        $doubleEncode If set to false, no encoding of existing entities
     * @return string
     */
    public static function htmlspecialchars(
        ?string $string = '',
        int $quoteStyle = ENT_HTML5,
        string $charset = 'utf-8',
        bool $doubleEncode = false
    ): string {
        return htmlspecialchars(
            $string,
            $quoteStyle,
            $charset,
            $doubleEncode
        );
    }

    /**
     * Convert all applicable characters to HTML entities.
     *
     * @param string $string The input string.
     * @param int    $quoteStyle Quote style
     * @param string $charset Character set, UTF-8 by default
     * @param bool   $doubleEncode If set to false, no encoding of existing entities
     * @return string
     */
    public static function htmlentities(
        string $string,
        int $quoteStyle = ENT_HTML5,
        string $charset = 'utf-8',
        bool $doubleEncode = false
    ): string
    {
        return htmlentities(
            $string,
            $quoteStyle,
            $charset,
            $doubleEncode
        );
    }
}