类 yii\helpers\StringHelper
继承关系 | yii\helpers\StringHelper » yii\helpers\BaseStringHelper |
---|---|
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/helpers/StringHelper.php |
StringHelper。
公共方法
方法详情
定义于: yii\helpers\BaseStringHelper::base64UrlDecode()
解码“使用URL和文件名安全字母表的Base 64编码”(RFC 4648)。
public static string base64UrlDecode ( $input ) | ||
$input | 字符串 |
已编码的字符串。 |
返回值 | 字符串 |
已解码的字符串。 |
---|
public static function base64UrlDecode($input)
{
return base64_decode(strtr($input, '-_', '+/'));
}
定义于: yii\helpers\BaseStringHelper::base64UrlEncode()
将字符串编码为“使用URL和文件名安全字母表的Base 64编码”(RFC 4648)。
注意:返回字符串的末尾可能存在 Base 64 填充
=
。=
对 URL 编码不透明。
public static string base64UrlEncode ( $input ) | ||
$input | 字符串 |
要编码的字符串。 |
返回值 | 字符串 |
已编码的字符串。 |
---|
public static function base64UrlEncode($input)
{
return strtr(base64_encode($input), '+/', '-_');
}
定义于: yii\helpers\BaseStringHelper::basename()
返回路径的尾部名称组件。
此方法类似于 php 函数 basename()
,不同之处在于它将 \ 和 / 都视为目录分隔符,独立于操作系统。此方法主要是为了处理 php 命名空间而创建的。当处理实际文件路径时,php 的 basename()
应该可以正常工作。注意:此方法不知道实际的文件系统或路径组件(如“..”)。
public static string basename ( $path, $suffix = '' ) | ||
$path | 字符串 |
路径字符串。 |
$suffix | 字符串 |
如果名称组件以后缀结尾,则此后缀也将被截断。 |
返回值 | 字符串 |
给定路径的尾部名称组件。 |
---|
public static function basename($path, $suffix = '')
{
$path = (string)$path;
$len = mb_strlen($suffix);
if ($len > 0 && mb_substr($path, -$len) === $suffix) {
$path = mb_substr($path, 0, -$len);
}
$path = rtrim(str_replace('\\', '/', $path), '/');
$pos = mb_strrpos($path, '/');
if ($pos !== false) {
return mb_substr($path, $pos + 1);
}
return $path;
}
public static 整数 byteLength ( $string ) | ||
$string | 字符串 |
要测量长度的字符串 |
返回值 | 整数 |
给定字符串中的字节数。 |
---|
public static function byteLength($string)
{
return mb_strlen((string)$string, '8bit');
}
定义于: yii\helpers\BaseStringHelper::byteSubstr()
返回由开始和长度参数指定的字符串部分。
此方法通过使用 mb_substr()
来确保字符串被视为字节数组。
public static 字符串 byteSubstr ( $string, $start, $length = null ) | ||
$string | 字符串 |
输入字符串。必须为一个或多个字符。 |
$start | 整数 |
起始位置 |
$length | 整数|空 |
所需的部分长度。如果未指定或为 |
返回值 | 字符串 |
提取的字符串部分,或在失败或空字符串时返回 FALSE。 |
---|
public static function byteSubstr($string, $start, $length = null)
{
if ($length === null) {
$length = static::byteLength($string);
}
return mb_substr((string)$string, $start, $length, '8bit');
}
定义于: yii\helpers\BaseStringHelper::countWords()
统计字符串中的单词数。
public static 整数 countWords ( $string ) | ||
$string | 字符串 |
要计算的文本 |
public static function countWords($string)
{
return count(preg_split('/\s+/u', $string, 0, PREG_SPLIT_NO_EMPTY));
}
定义于: yii\helpers\BaseStringHelper::dirname()
返回父目录的路径。
此方法类似于 dirname()
,但它会将 \ 和 / 都视为目录分隔符,而与操作系统无关。
public static 字符串 dirname ( $path ) | ||
$path | 字符串 |
路径字符串。 |
返回值 | 字符串 |
父目录的路径。 |
---|
public static function dirname($path)
{
$normalizedPath = rtrim(
str_replace('\\', '/', (string)$path),
'/'
);
$separatorPosition = mb_strrpos($normalizedPath, '/');
if ($separatorPosition !== false) {
return mb_substr($path, 0, $separatorPosition);
}
return '';
}
定义于: yii\helpers\BaseStringHelper::endsWith()
检查给定字符串是否以指定的子字符串结尾。二进制和多字节安全。
public static 布尔值 endsWith ( $string, $with, $caseSensitive = true ) | ||
$string | 字符串 |
要检查的输入字符串 |
$with | 字符串 |
要在 |
$caseSensitive | 布尔值 |
区分大小写的搜索。默认为 true。启用区分大小写时, |
返回值 | 布尔值 |
如果第一个输入以第二个输入结尾,则返回 true,否则返回 false |
---|
public static function endsWith($string, $with, $caseSensitive = true)
{
$string = (string)$string;
$with = (string)$with;
if (!$bytes = static::byteLength($with)) {
return true;
}
if ($caseSensitive) {
// Warning check, see https://www.php.ac.cn/substr-compare#refsect1-function.substr-compare-returnvalues
if (static::byteLength($string) < $bytes) {
return false;
}
return substr_compare($string, $with, -$bytes, $bytes) === 0;
}
$encoding = Yii::$app ? Yii::$app->charset : 'UTF-8';
$string = static::byteSubstr($string, -$bytes);
return mb_strtolower($string, $encoding) === mb_strtolower($with, $encoding);
}
定义于: yii\helpers\BaseStringHelper::explode()
将字符串分解成数组,可以选择修剪值并跳过空值。
public static 数组 explode ( $string, $delimiter = ',', $trim = true, $skipEmpty = false ) | ||
$string | 字符串 |
要分割的字符串。 |
$delimiter | 字符串 |
分隔符。默认为 ','。 |
$trim | 混合类型 |
是否修剪每个元素。可以是
|
$skipEmpty | 布尔值 |
是否跳过分隔符之间的空字符串。默认为 false。 |
public static function explode($string, $delimiter = ',', $trim = true, $skipEmpty = false)
{
$result = explode($delimiter, $string);
if ($trim !== false) {
if ($trim === true) {
$trim = 'trim';
} elseif (!is_callable($trim)) {
$trim = function ($v) use ($trim) {
return trim($v, $trim);
};
}
$result = array_map($trim, $result);
}
if ($skipEmpty) {
// Wrapped with array_values to make array keys sequential after empty values removing
$result = array_values(array_filter($result, function ($value) {
return $value !== '';
}));
}
return $result;
}
定义于: yii\helpers\BaseStringHelper::findBetween()
返回字符串中位于起始字符串的第一个出现位置和之后结束字符串的最后一个出现位置之间的部分。
public static 字符串|空 findBetween ( $string, $start, $end ) | ||
$string | 字符串 |
输入字符串。 |
$start | 字符串 |
标记要提取的部分起始的字符串。 |
$end | 字符串 |
标记要提取的部分结束的字符串。 |
返回值 | 字符串|空 |
start 第一次出现和 end 最后一次出现之间的字符串部分,如果 start 或 end 未找到,则返回 null。 |
---|
public static function findBetween($string, $start, $end)
{
$startPos = mb_strpos($string, $start);
if ($startPos === false) {
return null;
}
$startPos += mb_strlen($start);
$endPos = mb_strrpos($string, $end, $startPos);
if ($endPos === false) {
return null;
}
return mb_substr($string, $startPos, $endPos - $startPos);
}
public static 字符串 floatToString ( $number ) | ||
$number | 浮点数|整数 |
浮点数或整数。 |
返回值 | 字符串 |
数字的字符串表示形式。 |
---|
public static function floatToString($number)
{
// . and , are the only decimal separators known in ICU data,
// so its safe to call str_replace here
return str_replace(',', '.', (string) $number);
}
public static 字符串 mask ( $string, $start, $length, $mask = '*' ) | ||
$string | 字符串 |
输入字符串。 |
$start | 整数 |
要开始掩码的起始位置。这可以是正整数或负整数。正值从开头计数,负值从字符串末尾计数。 |
$length | 整数 |
要掩码的部分的长度。掩码将从 $start 位置开始,并持续 $length 个字符。 |
$mask | 字符串 |
用于掩码的字符。默认为 '*'。 |
返回值 | 字符串 |
掩码后的字符串。 |
---|
public static function mask($string, $start, $length, $mask = '*')
{
$strLength = mb_strlen($string, 'UTF-8');
// Return original string if start position is out of bounds
if ($start >= $strLength || $start < -$strLength) {
return $string;
}
$masked = mb_substr($string, 0, $start, 'UTF-8');
$masked .= str_repeat($mask, abs($length));
$masked .= mb_substr($string, $start + abs($length), null, 'UTF-8');
return $masked;
}
定义于: yii\helpers\BaseStringHelper::matchWildcard()
检查传递的字符串是否与给定的 shell 通配符模式匹配。
此函数使用 PCRE 模拟 fnmatch(),该函数在某些环境中可能不可用。
public static 布尔值 matchWildcard ( $pattern, $string, $options = [] ) | ||
$pattern | 字符串 |
shell 通配符模式。 |
$string | 字符串 |
被测试的字符串。 |
$options | 数组 |
匹配选项。有效选项为
|
返回值 | 布尔值 |
字符串是否与模式匹配。 |
---|
public static function matchWildcard($pattern, $string, $options = [])
{
if ($pattern === '*' && empty($options['filePath'])) {
return true;
}
$replacements = [
'\\\\\\\\' => '\\\\',
'\\\\\\*' => '[*]',
'\\\\\\?' => '[?]',
'\*' => '.*',
'\?' => '.',
'\[\!' => '[^',
'\[' => '[',
'\]' => ']',
'\-' => '-',
];
if (isset($options['escape']) && !$options['escape']) {
unset($replacements['\\\\\\\\']);
unset($replacements['\\\\\\*']);
unset($replacements['\\\\\\?']);
}
if (!empty($options['filePath'])) {
$replacements['\*'] = '[^/\\\\]*';
$replacements['\?'] = '[^/\\\\]';
}
$pattern = strtr(preg_quote($pattern, '#'), $replacements);
$pattern = '#^' . $pattern . '$#us';
if (isset($options['caseSensitive']) && !$options['caseSensitive']) {
$pattern .= 'i';
}
return preg_match($pattern, (string)$string) === 1;
}
定义于: yii\helpers\BaseStringHelper::mb_ucfirst()
此方法提供了内置 PHP 函数 ucfirst()
的 Unicode 安全实现。
public static string mb_ucfirst ( $string, $encoding = 'UTF-8' ) | ||
$string | 字符串 |
要处理的字符串 |
$encoding | 字符串 |
可选,默认为“UTF-8” |
public static function mb_ucfirst($string, $encoding = 'UTF-8')
{
$firstChar = mb_substr((string)$string, 0, 1, $encoding);
$rest = mb_substr((string)$string, 1, null, $encoding);
return mb_strtoupper($firstChar, $encoding) . $rest;
}
定义于: yii\helpers\BaseStringHelper::mb_ucwords()
此方法提供了内置 PHP 函数 ucwords()
的 Unicode 安全实现。
public static string mb_ucwords ( $string, $encoding = 'UTF-8' ) | ||
$string | 字符串 |
要处理的字符串 |
$encoding | 字符串 |
可选,默认为“UTF-8” |
public static function mb_ucwords($string, $encoding = 'UTF-8')
{
$string = (string) $string;
if (empty($string)) {
return $string;
}
$parts = preg_split('/(\s+\W+\s+|^\W+\s+|\s+)/u', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$ucfirstEven = trim(mb_substr($parts[0], -1, 1, $encoding)) === '';
foreach ($parts as $key => $value) {
$isEven = (bool)($key % 2);
if ($ucfirstEven === $isEven) {
$parts[$key] = static::mb_ucfirst($value, $encoding);
}
}
return implode('', $parts);
}
定义于: yii\helpers\BaseStringHelper::normalizeNumber()
返回数字值的字符串表示形式,如果当前区域设置的小数点是逗号,则将逗号替换为点。
public static string normalizeNumber ( $value ) | ||
$value | integer|float|string |
要标准化的值。 |
public static function normalizeNumber($value)
{
$value = (string) $value;
$localeInfo = localeconv();
$decimalSeparator = isset($localeInfo['decimal_point']) ? $localeInfo['decimal_point'] : null;
if ($decimalSeparator !== null && $decimalSeparator !== '.') {
$value = str_replace($decimalSeparator, '.', $value);
}
return $value;
}
定义于: yii\helpers\BaseStringHelper::startsWith()
检查给定字符串是否以指定的子字符串开头。二进制和多字节安全。
public static boolean startsWith ( $string, $with, $caseSensitive = true ) | ||
$string | 字符串 |
输入字符串 |
$with | 字符串 |
在 $string 中搜索的部分 |
$caseSensitive | 布尔值 |
区分大小写搜索。默认为 true。启用区分大小写时, |
返回值 | 布尔值 |
如果第一个输入以第二个输入开头,则返回 true,否则返回 false |
---|
public static function startsWith($string, $with, $caseSensitive = true)
{
$string = (string)$string;
$with = (string)$with;
if (!$bytes = static::byteLength($with)) {
return true;
}
if ($caseSensitive) {
return strncmp($string, $with, $bytes) === 0;
}
$encoding = Yii::$app ? Yii::$app->charset : 'UTF-8';
$string = static::byteSubstr($string, 0, $bytes);
return mb_strtolower($string, $encoding) === mb_strtolower($with, $encoding);
}
定义于: yii\helpers\BaseStringHelper::truncate()
将字符串截断到指定的字符数。
为了截断到精确长度,必须将 $suffix 字符长度计入 $length。例如,要获得一个恰好 255 个字符长的字符串,其中 $suffix 为 ...
(3 个字符),则必须使用 StringHelper::truncate($string, 252, '...')
来确保截断后的字符串长度为 255。
public static string truncate ( $string, $length, $suffix = '...', $encoding = null, $asHtml = false ) | ||
$string | 字符串 |
要截断的字符串。 |
$length | 整数 |
要包含在截断字符串中的原始字符串的字符数。 |
$suffix | 字符串 |
要附加到截断字符串末尾的字符串。 |
$encoding | 字符串|空 |
要使用的字符集,默认为应用程序当前使用的字符集。 |
$asHtml | 布尔值 |
是否将要截断的字符串视为 HTML 并保留正确的 HTML 标签。此参数自版本 2.0.1 起可用。 |
返回值 | 字符串 |
截断后的字符串。 |
---|
public static function truncate($string, $length, $suffix = '...', $encoding = null, $asHtml = false)
{
$string = (string)$string;
if ($encoding === null) {
$encoding = Yii::$app ? Yii::$app->charset : 'UTF-8';
}
if ($asHtml) {
return static::truncateHtml($string, $length, $suffix, $encoding);
}
if (mb_strlen($string, $encoding) > $length) {
return rtrim(mb_substr($string, 0, $length, $encoding)) . $suffix;
}
return $string;
}
定义于: yii\helpers\BaseStringHelper::truncateHtml()
截断字符串同时保留 HTML。
protected static string truncateHtml ( $string, $count, $suffix, $encoding = false ) | ||
$string | 字符串 |
要截断的字符串 |
$count | 整数 |
计数器 |
$suffix | 字符串 |
要附加到截断字符串末尾的字符串。 |
$encoding | string|boolean |
编码标志或字符集。 |
protected static function truncateHtml($string, $count, $suffix, $encoding = false)
{
$config = \HTMLPurifier_Config::create(null);
if (Yii::$app !== null) {
$config->set('Cache.SerializerPath', Yii::$app->getRuntimePath());
}
$lexer = \HTMLPurifier_Lexer::create($config);
$tokens = $lexer->tokenizeHTML($string, $config, new \HTMLPurifier_Context());
$openTokens = [];
$totalCount = 0;
$depth = 0;
$truncated = [];
foreach ($tokens as $token) {
if ($token instanceof \HTMLPurifier_Token_Start) { //Tag begins
$openTokens[$depth] = $token->name;
$truncated[] = $token;
++$depth;
} elseif ($token instanceof \HTMLPurifier_Token_Text && $totalCount <= $count) { //Text
if (false === $encoding) {
preg_match('/^(\s*)/um', $token->data, $prefixSpace) ?: $prefixSpace = ['', ''];
$token->data = $prefixSpace[1] . self::truncateWords(ltrim($token->data), $count - $totalCount, '');
$currentCount = self::countWords($token->data);
} else {
$token->data = self::truncate($token->data, $count - $totalCount, '', $encoding);
$currentCount = mb_strlen($token->data, $encoding);
}
$totalCount += $currentCount;
$truncated[] = $token;
} elseif ($token instanceof \HTMLPurifier_Token_End) { //Tag ends
if ($token->name === $openTokens[$depth - 1]) {
--$depth;
unset($openTokens[$depth]);
$truncated[] = $token;
}
} elseif ($token instanceof \HTMLPurifier_Token_Empty) { //Self contained tags, i.e. <img/> etc.
$truncated[] = $token;
}
if ($totalCount >= $count) {
if (0 < count($openTokens)) {
krsort($openTokens);
foreach ($openTokens as $name) {
$truncated[] = new \HTMLPurifier_Token_End($name);
}
}
break;
}
}
$context = new \HTMLPurifier_Context();
$generator = new \HTMLPurifier_Generator($config, $context);
return $generator->generateFromTokens($truncated) . ($totalCount >= $count ? $suffix : '');
}
定义于: yii\helpers\BaseStringHelper::truncateWords()
将字符串截断到指定的单词数。
public static string truncateWords ( $string, $count, $suffix = '...', $asHtml = false ) | ||
$string | 字符串 |
要截断的字符串。 |
$count | 整数 |
要包含在截断字符串中的原始字符串的单词数。 |
$suffix | 字符串 |
要附加到截断字符串末尾的字符串。 |
$asHtml | 布尔值 |
是否将要截断的字符串视为 HTML 并保留正确的 HTML 标签。此参数自版本 2.0.1 起可用。 |
返回值 | 字符串 |
截断后的字符串。 |
---|
public static function truncateWords($string, $count, $suffix = '...', $asHtml = false)
{
if ($asHtml) {
return static::truncateHtml($string, $count, $suffix);
}
$words = preg_split('/(\s+)/u', trim($string), 0, PREG_SPLIT_DELIM_CAPTURE);
if (count($words) / 2 > $count) {
return implode('', array_slice($words, 0, ($count * 2) - 1)) . $suffix;
}
return $string;
}
注册 或 登录 以发表评论。