在公司做网信官网的时候,用到onethink系统自带的字符串截取函数.但是在使用的过程中,却没有达到自己想要的结果.就是在截取新闻列表中的描述的时候.设置了一个长度,如果超过这个长度的话,就显示省略号,如果没有超过给定的长度,就全部显示出来,用系统默认的字符串截取的话,是没有达到想要的效果的.后来就修改了下系统默认的字符串截取函数.代码如下: 把以下代码复制到ThinkPHP/Common/function.php文件中,我说的是3.23版本,其他版本复制到到公用函数文件里就行。
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) {
if(function_exists("mb_substr")) {
if($suffix)
{
if($str==mb_substr($str, $start, $length, $charset))
{
return mb_substr($str, $start, $length, $charset);
}
else
{
return mb_substr($str, $start, $length, $charset)."...";
}
}
else { return mb_substr($str, $start, $length, $charset); } }
elseif(function_exists('iconv_substr')) { if($suffix) {
if($str==iconv_substr($str,$start,$length,$charset))
{ return iconv_substr($str,$start,$length,$charset); }
else{ 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;
}
特此记录一下,以免忘记....