THINKPHP中已经准备好的字符串截取函数。
ThinkPHP 官方扩展的 msubstr 方法其实挺好的,但有以下几个问题:
1,调用的时候会多次判断,包括2次判断是否自带了 mb_substr 和 iconv_substr 函数;
2,无论是否超出长度,如果有 $suffix=true 都会追加省略号,这个不太合理;
介于以上两点,并且在确保自己的服务器支持 mb_substr 函数、并且都是 utf-8 编码的情况下,我们其实可以自己在 Common/common.php(3.2 版本中为 function.php) 中自己添加一个 subtext 的函数,代码如下:
function subtext($text, $length)
{
if(mb_strlen($text, 'utf8') > $length)
return mb_substr($text, 0, $length, 'utf8').'...';
return $text;
}
这样在模版中调用的话,只需要用 {$vo.title|subtext=10} 这样即可,同时实现了,如果没超出长度,则不追加省略号的效果。
# 函数解释:
msubstr($str, $start=0, $length, $charset=”utf-8″, $suffix=true)
/*
$str:要截取的字符串
$start=0:开始位置,默认从0开始
$length:截取长度
$charset=”utf-8″:字符编码,默认UTF-8
$suffix=true:是否在截取后的字符后面显示省略号,默认true显示,false为不显示
*/
模版使用:
{$vo.title|msubstr=0,5,'utf-8',false}
Ps:若是核心版的可能不存在该函数,不用怕,逐风把代码给大家贴出来:
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr")){
if($suffix)
return mb_substr($str, $start, $length, $charset)."...";
else
return mb_substr($str, $start, $length, $charset);
}
elseif(function_exists('iconv_substr')) {
if($suffix)
return iconv_substr($str,$start,$length,$charset)."...";
else
return iconv_substr($str,$start,$length,$charset);
}
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("",array_slice($match[0], $start, $length));
if($suffix) return $slice."…";
return $slice;
}
罚罪1+2全80集阿里云盘全集资源链接-罚罪1+2全集高清1080P/4K阿里云盘资源下载无删减
邵氏精品禁品未删减资源在线看-必看的50部邵氏电影无删减观看入口
羞羞漫画高清最新资源-正规平台免费入口与无删减资源导航
日漫入口-官方认证安全入口与无删减日漫资源直达导航
一拳超人漫画入口-2026最新免费高清全集在线看
杨紫《生命树》1080p全40集迅雷磁力链接分享-杨紫《生命树》40集高清完整版迅雷云盘下载1080P(4k)资源