mb_strcut

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

mb_strcut获取字符串的一部分

描述

mb_strcut(
    string $string,
    int $start,
    ?int $length = null,
    ?string $encoding = null
): string

mb_strcut() 从字符串中提取子字符串,类似于 mb_substr(),但操作的是字节而不是字符。如果切割位置恰好位于多字节字符的两个字节之间,则从该字符的第一个字节开始进行切割。这也是与 substr() 函数的不同之处,substr() 函数会简单地将字符串切割在字节之间,从而导致字节序列格式错误。

参数

string

被切割的 string

start

如果 start 非负,则返回的字符串将从 string 中的第 start字节位置开始,从零开始计数。例如,在字符串 'abcdef' 中,位置 0 处的字节是 'a',位置 2 处的字节是 'c',依此类推。

如果 start 为负,则返回的字符串将从 string 末尾倒数第 start 个字节开始。但是,如果负 start 的大小大于字符串的长度,则返回的部分将从 string 的开头开始。

length

字节为单位的长度。如果省略或传递 NULL,则提取所有字节到字符串的末尾。

如果 length 为负,则返回的字符串将从 string 末尾倒数第 length 个字节结束。但是,如果负 length 的大小大于 start 位置后的字符数,则将返回空字符串。

encoding

encoding 参数是字符编码。如果省略或为 null,将使用内部字符编码值。

返回值

mb_strcut() 返回 string 的由 startlength 参数指定的子字符串。

变更日志

版本 描述
8.0.0 encoding 现在可以为空。

参见

添加注释

用户贡献的注释 5 个注释

1
David Juhasz
2 年前
这让我很抓狂,因为 mb_strcut() 总是返回空字符串。$length 参数似乎有一个最大值 2^32-1 (2147483647)。

有效
<?php
# 输出:Полуустав
echo mb_strcut('Полуустав', 0, pow(2,31)-1);
?>

无效
<?php
# 没有任何输出
echo mb_strcut('Полуустав', 0, pow(2,31));
?>

我的 PHP_INT_MAX 值远大于 2^32-1,所以我不确定为什么 $length 的更大值无效。:(

<?php
# 输出:9223372036854775807
echo PHP_INT_MAX;
?>
4
olivthill at gmail dot com
6 年前
以下是一个包含 UTF8 字符的示例,以查看 start 和 length 参数是如何工作的

$str_utf8 = utf8_encode("Déjà_vu");
$str_utf8_0 = mb_strcut($str_utf8, 0, 4, "UTF-8"); // Déj
$str_utf8_1 = mb_strcut($str_utf8, 1, 4, "UTF-8"); // éj
$str_utf8_2 = mb_strcut($str_utf8, 2, 4, "UTF-8"); // éj
$str_utf8_3 = mb_strcut($str_utf8, 3, 4, "UTF-8"); // jà_
$str_utf8_4 = mb_strcut($str_utf8, 4, 4, "UTF-8"); // à_v

该字符串包含两个特殊字符,“é” 和 “à”,它们内部使用两个字节编码。
请注意,多字节字符会被移除,而不是在输出的末尾保留一半。
还要注意,对于此字符串,切割 1,4 和切割 2,4 的结果是相同的。
4
t dot starling at physics dot unimelb dot edu dot au
19 年前
手册和第一个评论者试图说的是,mb_strcut 使用字节偏移量,而 mb_substr 使用字符偏移量。

mb_strcut 和 mb_substr 似乎都以与 substr 基本相同的方式处理负偏移量和超出范围的偏移量和长度。一个例外是,如果 start 太大,则将返回空字符串而不是 FALSE。测试表明,mb_strcut 首先计算出 start 和 end 字节偏移量,然后将每个偏移量向左移动到最近的字符边界。
-1
oyag02 at yahoo dot co dot jp
20 年前
mb_substr 和 mb_substr 之间的区别

示例
mb_strcut('I_ROHA', 1, 2) 返回 'I_'。被视为字节流。
mb_substr('I_ROHA', 1, 2) 返回 'ROHA'。被视为字符流。

# 'I_' 'RO' 'HA' 表示多字节字符
-29
php_engineer_bk at yahoo dot com
13 年前
function cut_sense($matne_harf, $l_harf ,$return=1 ) {
if ( strlen($matne_harf) > $l_harf){
$end='...';
}else{
$end='';
}
if ( function_exists('mb_strcut') ){
$matne_harf = mb_strcut ( $matne_harf, 0 , $l_harf , "UTF-8" );
}else{
$matne_harf =substr($matne_harf, 0, $l_harf);
}
$text=''.$matne_harf.''.$end.'';
if ( $return == 1){
return $text;
}else{
print $text;
}
}

伊朗 PHP 程序员 (farhad zand +989383015266)
To Top