Symfony\Polyfill\Mbstring

Mbstring::mb_convert_case │ public static │ CF7 1.0

Метод класса: Mbstring{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$result = Mbstring::mb_convert_case( $s, $mode, $encoding );
$s(обязательный)
.
$mode(обязательный)
.
$encoding
.
По умолчанию: null

Код Mbstring::mb_convert_case() CF7 6.2.4.1

public static function mb_convert_case($s, $mode, $encoding = null)
{
    $s = (string) $s;
    if ('' === $s) {
        return '';
    }

    $encoding = self::getEncoding($encoding);

    if ('UTF-8' === $encoding) {
        $encoding = null;
        if (!preg_match('//u', $s)) {
            $s = self::scrubUtf8($s);
        }
    } else {
        $s = self::iconv($encoding, 'UTF-8', $s);
    }

    if (\MB_CASE_TITLE == $mode) {
        static $titleRegexp = null;
        if (null === $titleRegexp) {
            $titleRegexp = self::getData('titleCaseRegexp');
        }
        $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s);
    } else {
        if (\MB_CASE_UPPER == $mode) {
            static $upper = null;
            if (null === $upper) {
                $upper = self::getData('upperCase');
            }
            $map = $upper;
        } else {
            if (self::MB_CASE_FOLD === $mode) {
                static $caseFolding = null;
                if (null === $caseFolding) {
                    $caseFolding = self::getData('caseFolding');
                }
                $s = strtr($s, $caseFolding);
            }

            static $lower = null;
            if (null === $lower) {
                $lower = self::getData('lowerCase');
            }
            $map = $lower;
        }

        static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4];

        $i = 0;
        $len = \strlen($s);

        while ($i < $len) {
            $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"] ?? 1;
            $uchr = substr($s, $i, $ulen);
            $i += $ulen;

            if (isset($map[$uchr])) {
                $uchr = $map[$uchr];
                $nlen = \strlen($uchr);

                if ($nlen == $ulen) {
                    $nlen = $i;
                    do {
                        $s[--$nlen] = $uchr[--$ulen];
                    } while ($ulen);
                } else {
                    $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
                    $len += $nlen - $ulen;
                    $i += $nlen - $ulen;
                }
            }
        }
    }

    if (null === $encoding) {
        return $s;
    }

    return self::iconv('UTF-8', $encoding, $s);
}