0 关注者

类 yii\helpers\StringHelper

继承关系yii\helpers\StringHelper » yii\helpers\BaseStringHelper
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/helpers/StringHelper.php

StringHelper。

公共方法

隐藏继承方法

方法 描述 定义于
base64UrlDecode() 解码“使用URL和文件名安全字母表的Base 64编码”(RFC 4648)。 yii\helpers\BaseStringHelper
base64UrlEncode() 将字符串编码为“使用URL和文件名安全字母表的Base 64编码”(RFC 4648)。 yii\helpers\BaseStringHelper
basename() 返回路径的尾部名称组件。 yii\helpers\BaseStringHelper
byteLength() 返回给定字符串中的字节数。 yii\helpers\BaseStringHelper
byteSubstr() 返回由开始和长度参数指定的字符串部分。 yii\helpers\BaseStringHelper
countWords() 统计字符串中的单词数。 yii\helpers\BaseStringHelper
dirname() 返回父目录的路径。 yii\helpers\BaseStringHelper
endsWith() 检查给定字符串是否以指定的子字符串结尾。二进制和多字节安全。 yii\helpers\BaseStringHelper
explode() 将字符串分解成数组,可以选择修剪值并跳过空值。 yii\helpers\BaseStringHelper
findBetween() 返回字符串中位于起始字符串的第一个出现位置和之后结束字符串的最后一个出现位置之间的部分。 yii\helpers\BaseStringHelper
floatToString() 安全地将浮点数转换为字符串,独立于当前区域设置。 yii\helpers\BaseStringHelper
mask() 使用重复字符掩盖字符串的一部分。 yii\helpers\BaseStringHelper
matchWildcard() 检查传递的字符串是否与给定的 shell 通配符模式匹配。 yii\helpers\BaseStringHelper
mb_ucfirst() 此方法提供了内置 PHP 函数 ucfirst() 的 Unicode 安全实现。 yii\helpers\BaseStringHelper
mb_ucwords() 此方法提供了内置 PHP 函数 ucwords() 的 Unicode 安全实现。 yii\helpers\BaseStringHelper
normalizeNumber() 返回数字值的字符串表示形式,如果当前区域设置的小数点是逗号,则将逗号替换为点。 yii\helpers\BaseStringHelper
startsWith() 检查给定字符串是否以指定的子字符串开头。二进制和多字节安全。 yii\helpers\BaseStringHelper
truncate() 将字符串截断到指定的字符数。 yii\helpers\BaseStringHelper
truncateWords() 将字符串截断到指定的单词数。 yii\helpers\BaseStringHelper

受保护方法

隐藏继承方法

方法 描述 定义于
truncateHtml() 截断字符串同时保留 HTML。 yii\helpers\BaseStringHelper

方法详情

隐藏继承方法

base64UrlDecode() 公共静态方法 (自 2.0.12 版本起可用)

定义于: yii\helpers\BaseStringHelper::base64UrlDecode()

解码“使用URL和文件名安全字母表的Base 64编码”(RFC 4648)。

另见 https://tools.ietf.org/html/rfc4648#page-7

public static string base64UrlDecode ( $input )
$input 字符串

已编码的字符串。

返回值 字符串

已解码的字符串。

                public static function base64UrlDecode($input)
{
    return base64_decode(strtr($input, '-_', '+/'));
}

            
base64UrlEncode() 公共静态方法 (自 2.0.12 版本起可用)

定义于: yii\helpers\BaseStringHelper::base64UrlEncode()

将字符串编码为“使用URL和文件名安全字母表的Base 64编码”(RFC 4648)。

注意:返回字符串的末尾可能存在 Base 64 填充 == 对 URL 编码不透明。

另见 https://tools.ietf.org/html/rfc4648#page-7

public static string base64UrlEncode ( $input )
$input 字符串

要编码的字符串。

返回值 字符串

已编码的字符串。

                public static function base64UrlEncode($input)
{
    return strtr(base64_encode($input), '+/', '-_');
}

            
basename() 公共静态方法

定义于: yii\helpers\BaseStringHelper::basename()

返回路径的尾部名称组件。

此方法类似于 php 函数 basename(),不同之处在于它将 \ 和 / 都视为目录分隔符,独立于操作系统。此方法主要是为了处理 php 命名空间而创建的。当处理实际文件路径时,php 的 basename() 应该可以正常工作。注意:此方法不知道实际的文件系统或路径组件(如“..”)。

另见 https://php.ac.cn/manual/en/function.basename.php

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;
}

            
byteLength() 公共静态方法

定义于: yii\helpers\BaseStringHelper::byteLength()

返回给定字符串中的字节数。

此方法通过使用 mb_strlen() 确保字符串被视为字节数组。

public static 整数 byteLength ( $string )
$string 字符串

要测量长度的字符串

返回值 整数

给定字符串中的字节数。

                public static function byteLength($string)
{
    return mb_strlen((string)$string, '8bit');
}

            
byteSubstr() 公共静态方法

定义于: yii\helpers\BaseStringHelper::byteSubstr()

返回由开始和长度参数指定的字符串部分。

此方法通过使用 mb_substr() 来确保字符串被视为字节数组。

另请参阅 https://php.ac.cn/manual/en/function.substr.php

public static 字符串 byteSubstr ( $string, $start, $length null )
$string 字符串

输入字符串。必须为一个或多个字符。

$start 整数

起始位置

$length 整数|

所需的部分长度。如果未指定或为 null,则长度将不受限制,即输出将持续到字符串的末尾。

返回值 字符串

提取的字符串部分,或在失败或空字符串时返回 FALSE。

                public static function byteSubstr($string, $start, $length = null)
{
    if ($length === null) {
        $length = static::byteLength($string);
    }
    return mb_substr((string)$string, $start, $length, '8bit');
}

            
countWords() 公共静态方法 (自版本 2.0.8 起可用)

定义于: 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));
}

            
dirname() 公共静态方法

定义于: yii\helpers\BaseStringHelper::dirname()

返回父目录的路径。

此方法类似于 dirname(),但它会将 \ 和 / 都视为目录分隔符,而与操作系统无关。

另见 https://php.ac.cn/manual/en/function.basename.php

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 '';
}

            
endsWith() 公共静态方法

定义于: yii\helpers\BaseStringHelper::endsWith()

检查给定字符串是否以指定的子字符串结尾。二进制和多字节安全。

public static 布尔值 endsWith ( $string, $with, $caseSensitive true )
$string 字符串

要检查的输入字符串

$with 字符串

要在 $string 中搜索的部分。

$caseSensitive 布尔值

区分大小写的搜索。默认为 true。启用区分大小写时,$with 必须与字符串的结尾完全匹配才能获得 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);
}

            
explode() 公共静态方法 (自版本 2.0.4 起可用)

定义于: yii\helpers\BaseStringHelper::explode()

将字符串分解成数组,可以选择修剪值并跳过空值。

public static 数组 explode ( $string, $delimiter ',', $trim true, $skipEmpty false )
$string 字符串

要分割的字符串。

$delimiter 字符串

分隔符。默认为 ','。

$trim 混合类型

是否修剪每个元素。可以是

  • 布尔值 - 正常修剪;
  • 字符串 - 要修剪的自定义字符。将作为第二个参数传递给 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;
}

            
findBetween() 公共静态方法

定义于: 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);
}

            
floatToString() 公共静态方法 (自版本 2.0.13 起可用)

定义于: yii\helpers\BaseStringHelper::floatToString()

安全地将浮点数转换为字符串,独立于当前区域设置。

小数点分隔符将始终为 .

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);
}

            
mask() 公共静态方法

定义于: yii\helpers\BaseStringHelper::mask()

使用重复字符掩盖字符串的一部分。

此方法是多字节安全的。

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;
}

            
matchWildcard() 公共静态方法 (自版本 2.0.14 起可用)

定义于: yii\helpers\BaseStringHelper::matchWildcard()

检查传递的字符串是否与给定的 shell 通配符模式匹配。

此函数使用 PCRE 模拟 fnmatch(),该函数在某些环境中可能不可用。

public static 布尔值 matchWildcard ( $pattern, $string, $options = [] )
$pattern 字符串

shell 通配符模式。

$string 字符串

被测试的字符串。

$options 数组

匹配选项。有效选项为

  • caseSensitive: 布尔值,模式是否区分大小写。默认为 true
  • escape: 布尔值,是否启用反斜杠转义。默认为 true
  • filePath: 布尔值,字符串中的斜杠是否仅匹配给定模式中的斜杠。默认为 false
返回值 布尔值

字符串是否与模式匹配。

                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;
}

            
mb_ucfirst() 公共静态方法 (自版本 2.0.16 起可用)

定义于: yii\helpers\BaseStringHelper::mb_ucfirst()

此方法提供了内置 PHP 函数 ucfirst() 的 Unicode 安全实现。

另请参阅 https://php.ac.cn/manual/en/function.ucfirst.php.

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;
}

            
mb_ucwords() 公共静态方法 (自版本 2.0.16 起可用)

定义于: yii\helpers\BaseStringHelper::mb_ucwords()

此方法提供了内置 PHP 函数 ucwords() 的 Unicode 安全实现。

另请参阅 https://php.ac.cn/manual/en/function.ucwords.

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);
}

            
normalizeNumber() 公共静态方法 (自版本 2.0.11 起可用)

定义于: 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;
}

            
startsWith() 公共静态方法

定义于: yii\helpers\BaseStringHelper::startsWith()

检查给定字符串是否以指定的子字符串开头。二进制和多字节安全。

public static boolean startsWith ( $string, $with, $caseSensitive true )
$string 字符串

输入字符串

$with 字符串

在 $string 中搜索的部分

$caseSensitive 布尔值

区分大小写搜索。默认为 true。启用区分大小写时,$with 必须完全匹配字符串的开头才能获得 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);
}

            
truncate() 公共静态方法

定义于: 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;
}

            
truncateHtml() 受保护的静态方法 (自版本 2.0.1 起可用)

定义于: 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 : '');
}

            
truncateWords() 公共静态方法

定义于: 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;
}