比如有一个字符串,我只显示字符串的前10个字符,其余字符用省略号替代。
第一种方式:使用substr方式
$string = substr($string,0,10).'...';
上面代码并不建立,因为它没有检测字符串宽度php 截取字符串前,完善后的代码如下:
$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;
你会得到一个最多13个字符的字符串;13个(或更少)普通字符或10个字符后跟'...'
将前面代码封装至函数上面:
function truncate($string, $length, $dots = "...") {
return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}
上面函数依然有漏洞,当截取被wordwrap函数处理过的字符串时,会有问题:
完美的函数应当如下:
function truncate($string,$length=100,$append="…") {
$string = trim($string);
if(strlen($string) > $length) {
$string = wordwrap($string, $length);
$string = explode("\n", $string, 2);
$string = $string[0] . $append;
}
return $string;
}
第二种方式:
如果您还要控制字符串字符集,则多字节扩充可以派上用场。
$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
$string = mb_substr($string, 0, $length - 3, $charset) . '...';
}
第三种方式:
有时候,你还要将字符串限制为最后一个完整的短语php 截取字符串前,即:你不希望最后一个词汇被打破,而是用第二个词汇停止。
例如:我们还要将“This is my String”限制为6个字符,而不是“This i ...”,我们希望它为“This ...”,即我们将在最后一个词汇中跳过这些破碎的字母。
class Fun {
public function limit_text($text, $len) {
if (strlen($text) $len) && $out == null) {
return substr($word, 0, $len) . "...";
}
if ((strlen($out) + strlen($word)) > $len) {
return $out . "...";
}
$out.=" " . $word;
}
return $out;
}
}