0 关注者

类 yii\helpers\BaseStringHelper

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

BaseStringHelper 为 yii\helpers\StringHelper 提供具体实现。

不要使用 BaseStringHelper。请使用 yii\helpers\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 起可用)

解码“带 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 起可用)

将字符串编码为“带 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() 公共静态方法

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

此方法类似于 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() 公共静态方法

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

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

public static integer byteLength ( $string )
$string 字符串

正在测量长度的字符串

返回值 整数

给定字符串中的字节数。

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

            
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 起可用)

计算字符串中的单词数。

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

要计算的文本

                public static function countWords($string)
{
    return count(preg_split('/\s+/u', $string, 0, PREG_SPLIT_NO_EMPTY));
}

            
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() 公共静态方法

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

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 起可用)

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

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() 公共静态方法

返回字符串中位于开始字符串的第一次出现和之后结束字符串的最后一次出现之间的部分。

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 起可用)

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

小数分隔符将始终为.

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() 公共静态方法

使用重复的字符屏蔽字符串的一部分。

此方法支持多字节。

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 起可用)

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

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

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 起可用)

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

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

public static 字符串 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 起可用)

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

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

public static 字符串 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 起可用)

返回数字值的字符串表示形式,其中用点替换逗号,如果当前区域设置的小数点是逗号。

public static 字符串 normalizeNumber ( $value )
$value 整数|浮点数|字符串

要规范化的值。

                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() 公共静态方法

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

public static 布尔值 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() 公共静态方法

将字符串截断到指定的字符数。

为了截断到精确长度,必须将 $suffix 字符长度计入 $length。例如,要获得一个正好 255 个字符长的字符串,其中 $suffix 为 3 个字符的 ...,则必须使用 StringHelper::truncate($string, 252, '...') 来确保您随后拥有 255 个字符长的字符串。

public static 字符串 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 起可用)

截断字符串同时保留 HTML。

protected static 字符串 truncateHtml ( $string, $count, $suffix, $encoding false )
$string 字符串

要截断的字符串

$count 整数

计数器

$suffix 字符串

要附加到截断字符串末尾的字符串。

$encoding 字符串|布尔值

编码标志或字符集。

                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() 公共静态方法

将字符串截断到指定的单词数。

public static 字符串 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;
}