0; --$end) if(mb_strpos($chars, $split[$end], encoding: $encoding) === false) break; return mb_substr($string, $start, $end - $start + 1, $encoding); } /** * Strip whitespace (or other characters) from the start and end of a multibyte string. * * @param Stringable|string $string Input string. * @param string $chars Characters to strip. List all characters you want. .. operator from trim is not supported. * @param ?string $encoding String character encoding. null for mb_internal_encoding value. * @return string Trimmed string. */ public static function trim(Stringable|string $string, string $chars = self::TRIM_CHARS, ?string $encoding = null, ?string $charsEncoding = null): string { return self::trimInternal($string, $chars, $encoding, $charsEncoding, self::TRIM_ALL); } /** * Strip whitespace (or other characters) from the start of a multibyte string. * * @param Stringable|string $string Input string. * @param string $chars Characters to strip. List all characters you want. .. operator from ltrim is not supported. * @param ?string $encoding String character encoding. null for mb_internal_encoding value. * @return string Trimmed string. */ public static function trimStart(Stringable|string $string, string $chars = self::TRIM_CHARS, ?string $encoding = null, ?string $charsEncoding = null): string { return self::trimInternal($string, $chars, $encoding, $charsEncoding, self::TRIM_START); } /** * Strip whitespace (or other characters) from the end of a multibyte string. * * @param Stringable|string $string Input string. * @param string $chars Characters to strip. List all characters you want. .. operator from rtrim is not supported. * @param ?string $encoding String character encoding. null for mb_internal_encoding value. * @return string Trimmed string. */ public static function trimEnd(Stringable|string $string, string $chars = self::TRIM_CHARS, ?string $encoding = null, ?string $charsEncoding = null): string { return self::trimInternal($string, $chars, $encoding, $charsEncoding, self::TRIM_END); } /** * Reverses a multibyte string. * * @param Stringable|string $string String to reverse. * @param ?string $encoding String character encoding. null for mb_internal_encoding value. * @return string Reversed string. */ public static function reverse(Stringable|string $string, ?string $encoding = null): string { return implode(array_reverse(mb_str_split((string)$string, encoding: $encoding))); } /** * Counts unique characters in a string. * * @param Stringable|string $string String to count unique characters of. * @param ?string $encoding String character encoding. null for mb_internal_encoding value. * @return int Unique character count. */ public static function countUnique(Stringable|string $string, ?string $encoding = null): int { $string = mb_str_split((string)$string, encoding: $encoding); $chars = []; foreach($string as $char) if(!in_array($char, $chars, true)) $chars[] = $char; return count($chars); } /** * Check if a multibyte string is null or whitespace. * * @param Stringable|string|null $string String to check for whitespace. * @param ?string $encoding String character encoding. null for mb_internal_encoding value. * @return bool true if the string is whitespace, false if not. */ public static function nullOrWhitespace(Stringable|string|null $string, ?string $encoding = null): bool { return $string === null || self::trim((string)$string, encoding: $encoding) === ''; } }