06月05, 2015

thinkphp中的截取中文字符串方法msubstr()

在公司做网信官网的时候,用到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; 
}

特此记录一下,以免忘记....

本文链接:https://901web.com/post/thinkphp中的截取中文字符串方法msubstr.html

-- EOF --