mb_strimwidth

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

mb_strimwidth获取指定宽度截断的字符串

描述

mb_strimwidth(
    字符串 $string,
    整数 $start,
    整数 $width,
    字符串 $trim_marker = "",
    ?字符串 $encoding = null
): 字符串

字符串 string 截断为指定的 width,其中半角字符计为 1,全角字符计为 2。有关东亚字符宽度的详细信息,请参阅 » http://www.unicode.org/reports/tr11/

参数

string

要解码的 字符串

start

起始位置偏移量。从字符串开头开始的字符数(第一个字符为 0),或者如果 start 为负数,则从字符串末尾开始的字符数。

width

所需修剪的宽度。如果指定了负宽度,则从字符串末尾开始计数。

注意:

从 PHP 8.3.0 开始,传递负宽度已弃用。

trim_marker

当字符串被截断时,添加到字符串末尾的字符串。

encoding

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

返回值

截断的 字符串。如果设置了 trim_marker,则 trim_marker 会替换最后一个字符以匹配 width

变更日志

版本 描述
8.3.0 将负 width 传递给 mb_strimwidth() 现在已弃用。
8.0.0 encoding 现在可以为空。
7.1.0 已添加对负 startwidth 的支持。

示例

示例 #1 mb_strimwidth() 示例

<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
// 输出: "Hello W..."
?>

另请参阅

添加注释

用户贡献的注释 2 个注释

dregad at NOSPAM-mantisbt dot org
1 年前
我看到很多领域的使用情况,人们依赖此函数将字符串截断为给定长度,并在末尾追加一些字符,如下面的文档中的示例 #1 所示。

虽然这在西方字母中可以正常工作,但需要注意的是,字符串的宽度不一定是其长度。

在中文、日语和韩语中,某些字符可以表示为全角或半角,这可能会导致意外结果...

<?php
$str
= ['English' => 'Switzerland',
'Half width' => 'スイス',
'Full width' => 'スイス',
];
foreach (
$str as $w => $s) {
printf("%-10s: %s (bytes=%d chars=%d width=%d)\nSubstring : %s\nTrim width: %s\n\n",
$w, $s,
strlen($s), mb_strlen($s), mb_strwidth($s),
mb_substr($s, 0, 3),
mb_strimwidth($s, 0, 3)
);
}
/* 输出
# 使用 ASCII,字符 == 宽度,所以一切按预期工作
English : Switzerland (bytes=11 chars=11 width=11)
Substring : Swi
Trim width: Swi

# 使用半角片假名,它也起作用
Half width: スイス (bytes=9 chars=3 width=3)
Substring : スイス
Trim width: スイス

# 全角片假名的宽度是半角的两倍,所以我们只得到第一个 'su'!
Full width: スイス (bytes=9 chars=3 width=6)
Substring : スイス
Trim width: ス
*/
>?
jamesgrimshaw2006 at gmail dot com
10 个月前
mb_strimwidth 只有在字符串超过宽度时才会追加 "trim_marker"。

*测试代码*
$HashTags = 'Results';
$socialmediatext = 'abcdefghijklmnopqrstuvwxyz';
for( $i=0; $i<=20; $i++ )
{
$socialmediatext .= '.';
$Twittext = mb_strimwidth($socialmediatext,0,35,$HashTags);
echo "<p>[".strlen($Twittext)."]$Twittext</p>";
}

*输出*
[27]abcdefghijklmnopqrstuvwxyz.
[28]abcdefghijklmnopqrstuvwxyz..
[29]abcdefghijklmnopqrstuvwxyz...
[30]abcdefghijklmnopqrstuvwxyz....
[31]abcdefghijklmnopqrstuvwxyz.....
[32]abcdefghijklmnopqrstuvwxyz......
[33]abcdefghijklmnopqrstuvwxyz.......
[34]abcdefghijklmnopqrstuvwxyz........
[35]abcdefghijklmnopqrstuvwxyz.........
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
[35]abcdefghijklmnopqrstuvwxyz..Results
To Top