diff options
Diffstat (limited to 'vendor/vlucas/phpdotenv/src/Util/Str.php')
| -rw-r--r-- | vendor/vlucas/phpdotenv/src/Util/Str.php | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/vlucas/phpdotenv/src/Util/Str.php b/vendor/vlucas/phpdotenv/src/Util/Str.php new file mode 100644 index 0000000..15257bd --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Util/Str.php @@ -0,0 +1,98 @@ +<?php + +declare(strict_types=1); + +namespace Dotenv\Util; + +use GrahamCampbell\ResultType\Error; +use GrahamCampbell\ResultType\Success; +use PhpOption\Option; + +/** + * @internal + */ +final class Str +{ + /** + * This class is a singleton. + * + * @codeCoverageIgnore + * + * @return void + */ + private function __construct() + { + // + } + + /** + * Convert a string to UTF-8 from the given encoding. + * + * @param string $input + * @param string|null $encoding + * + * @return \GrahamCampbell\ResultType\Result<string,string> + */ + public static function utf8(string $input, ?string $encoding = null) + { + if ($encoding !== null && !\in_array($encoding, \mb_list_encodings(), true)) { + /** @var \GrahamCampbell\ResultType\Result<string,string> */ + return Error::create( + \sprintf('Illegal character encoding [%s] specified.', $encoding) + ); + } + $converted = $encoding === null ? + @\mb_convert_encoding($input, 'UTF-8') : + @\mb_convert_encoding($input, 'UTF-8', $encoding); + /** + * this is for support UTF-8 with BOM encoding + * @see https://en.wikipedia.org/wiki/Byte_order_mark + * @see https://github.com/vlucas/phpdotenv/issues/500 + */ + if (\substr($converted, 0, 3) == "\xEF\xBB\xBF") { + $converted = \substr($converted, 3); + } + /** @var \GrahamCampbell\ResultType\Result<string,string> */ + return Success::create($converted); + } + + /** + * Search for a given substring of the input. + * + * @param string $haystack + * @param string $needle + * + * @return \PhpOption\Option<int> + */ + public static function pos(string $haystack, string $needle) + { + /** @var \PhpOption\Option<int> */ + return Option::fromValue(\mb_strpos($haystack, $needle, 0, 'UTF-8'), false); + } + + /** + * Grab the specified substring of the input. + * + * @param string $input + * @param int $start + * @param int|null $length + * + * @return string + */ + public static function substr(string $input, int $start, ?int $length = null) + { + return \mb_substr($input, $start, $length, 'UTF-8'); + } + + /** + * Compute the length of the given string. + * + * @param string $input + * + * @return int + */ + public static function len(string $input) + { + return \mb_strlen($input, 'UTF-8'); + } +} |
