PHP截取字符串前N个字符的几种方法
|
比如有一个字符串,我只显示字符串的前10个字符,其余字符用省略号代替。 第一种方法:使用substr方法 $string = substr($string,10).'...'; 上面代码并不完善,因为它没有检查字符串长度,完善后的代码如下: $string = (strlen($string) > 13) ? substr($string,10).'...' : $string; 你会得到一个最多13个字符的字符串;13个(或更少)普通字符或10个字符后跟'...' 将上面代码封装到函数里面: function truncate($string,$length,$dots = "...") { return (strlen($string) > $length) ? substr($string,$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,$length - 3,$charset) . '...'; } 第三种方法: 有时候,你需要将字符串限制为最后一个完整的单词,即:你不希望最后一个单词被打破,而是用第二个单词停止。 例如:我们需要将“This is my String”限制为6个字符,而不是“This i ...”,我们希望它为“This ...”,即我们将在最后一个单词中跳过那些破碎的字母。 class Fun { public function limit_text($text,$len) { if (strlen($text) < $len) { return $text; } $text_words = explode(' ',$text); $out = null; foreach ($text_words as $word) { if ((strlen($word) > $len) && $out == null) { return substr($word,$len) . "..."; } if ((strlen($out) + strlen($word)) > $len) { return $out . "..."; } $out.=" " . $word; } return $out; } } (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
