1 public function sub_string($str, $len, $charset="utf-8") 2 { 3 if( !is_numeric($len) or $len <= 0) {//如果截取长度小于等于 4 return ""; //返回空 5 } 6 $sLen = strlen($str); //获取原始字串长度 7 if( $len >= $sLen ) { //如果截取长度大于总字符串长度 8 return $str; //直接返回当前字符串 9 } 10 if ( strtolower($charset) == "utf-8" ) { //如果编码为为utf-8 11 $len_step = 3; //则中文字符长度为3 12 } else { //如果不是 13 $len_step = 2; //如果是gb2312或big5编码,则中文字符长度为2 14 } 15 //执行截取操作 16 $len_i = 0; //初始化计数当前已截取的字符串个数,此值为字符串的个数值 17 $substr_len = 0; //初始化应该要截取的总字节数 18 for( $i=0; $i < $sLen; $i++ ) { //开始循环 19 if ( $len_i >= $len ) break; //总截取$len个字符串后,停止循环 20 if( ord(substr($str,$i,1)) > 0xa0 ) { //如果是中文字符串 21 $i += $len_step - 1; // 22 $substr_len += $len_step; //当前总字节数加上相应编码的中文字符长度 23 } else { //如果字符不是中文 24 $substr_len ++; //加1个字节 25 } 26 $len_i ++; //已经截取字符串个数增加 27 } 28 $result_str = substr($str,0,$substr_len ); //获取结果 29 return $result_str.'...'; //返回结果 30 }