mb_strimwidth
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_strimwidth — 获取按指定宽度截断的字符串
说明
mb_strimwidth(
string
int
int
string
?string
): string
string
$string
,int
$start
,int
$width
,string
$trim_marker
= "",?string
$encoding
= null
): string
将 string string
截断到指定 width
。其中半角字符计为
1
,全角字符计为 2
。有关东亚字符宽度的详细信息,请参阅 » http://www.unicode.org/reports/tr11/。
参数
返回值
截断后的 string。如果设置了 trim_marker
,还将结尾处的字符替换为
trim_marker
,并符合 width
的宽度。
更新日志
版本 | 说明 |
---|---|
8.3.0 |
将负的 width 传递给
mb_strimwidth() 现已废弃。
|
8.0.0 |
现在 encoding 可以为 null。
|
7.1.0 |
支持负数的 start 和 width 。
|
示例
示例 #1 mb_strimwidth() 示例
<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
// 输出 Hello W...
?>
+添加备注
用户贡献的备注 2 notes
dregad at NOSPAM-mantisbt dot org ¶
1 year ago
I see a lot of usage in the field where people rely on this function to truncate a string to a given length and append some chars at the end following example #1 in the above documentation.
While this works just fine with Western alphabets, it should be noted that a string's width is NOT necessarily the same as its length.
In Chinese, Japanese and Korean, some characters can be represented as full or half width, which may lead to unexpected results...
<?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)
);
}
/* Output
# With ASCII, chars == width, so everything works as expected
English : Switzerland (bytes=11 chars=11 width=11)
Substring : Swi
Trim width: Swi
# With half-width katakanas, it works too
Half width: スイス (bytes=9 chars=3 width=3)
Substring : スイス
Trim width: スイス
# Full-width katakanas are twice as wide, so we only get the 1st 'su' !
Full width: スイス (bytes=9 chars=3 width=6)
Substring : スイス
Trim width: ス
*/
>?
jamesgrimshaw2006 at gmail dot com ¶
1 year ago
mb_strimwidth will only append "trim_marker" if the string is over the width.
*test code*
$HashTags = 'Results';
$socialmediatext = 'abcdefghijklmnopqrstuvwxyz';
for( $i=0; $i<=20; $i++ )
{
$socialmediatext .= '.';
$Twittext = mb_strimwidth($socialmediatext,0,35,$HashTags);
echo "<p>[".strlen($Twittext)."]$Twittext</p>";
}
*output*
[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
备份地址:http://www.lvesu.com/blog/php/function.mb-strimwidth.php