🎉
This commit is contained in:
98
vendor/vlucas/phpdotenv/src/Util/Str.php
vendored
Normal file
98
vendor/vlucas/phpdotenv/src/Util/Str.php
vendored
Normal file
@@ -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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user