字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了。 01 <?php 02 function sysSubStr($string,$length,$append = false) 03 { 04 if(strlen($string) <= $length ) 05 { 06 return $string; 07 } 08 else 09 { 10 $i = 0; 11 while ($i < $length) 12 { 13 $stringTMP = substr($string,$i,1); 14 if ( ord($stringTMP) >=224 ) 15 { 16 $stringTMP = substr($string,$i,3); 17 $i = $i + 3; 18 } 19 elseif( ord($stringTMP) >=192 ) 20 { 21 $stringTMP = substr($string,$i,2); 22 $i = $i + 2; 23 } 24 else 25 { 26 $i = $i + 1; 27 } 28 $stringLast[] = $stringTMP; 29 } 30 $stringLast = implode("",$stringLast); 31 if($append) 32 { 33 $stringLast .= "..."; 34 } 35 return $stringLast; 36 } 37 } 38 39 $string = "简明现代魔法 —— 专注于互联网主流的各种技术"; 40 $length = "27"; 41 $append = true; 42 echo sysSubStr($string,$length,$append); 43 // 输出 44 // 简明现代魔法 —— 专... 45 ?> 截取GB2312中文字符串: 01 <?php 02 //截取中文字符串 03 function mysubstr($str, $start, $len) { 04 $tmpstr = ""; 05 $strlen = $start + $len; 06 for($i = 0; $i < $strlen; $i++) { 07 if(ord(substr($str, $i, 1)) > 0xa0) { 08 $tmpstr .= substr($str, $i, 2); 09 $i++; 10 } else 11 $tmpstr .= substr($str, $i, 1); 12 } 13 return $tmpstr; 14 } 15 ?> 截取utf8编码的多字节字符串: 1 <?php 2 //截取utf8字符串 3 function utf8Substr($str, $from, $len) 4 { 5 return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. 6 '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', 7 '$1',$str); 8 } 9 ?> UTF-8、GB2312都支持的汉字截取函数: 01 <?php 02 /* 03 Utf-8、gb2312都支持的汉字截取函数 04 cut_str(字符串, 截取长度, 开始长度, 编码); 05 编码默认为 utf-8 06 开始长度默认为 0 07 */ 08 09 function cut_str($string, $sublen, $start = 0, $code = 'UTF-8') 10 { 11 if($code == 'UTF-8') 12 { 13 $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; 14 preg_match_all($pa, $string, $t_string); 15 16 if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; 17 return join('', array_slice($t_string[0], $start, $sublen)); 18 } 19 else 20 { 21 $start = $start*2; 22 $sublen = $sublen*2; 23 $strlen = strlen($string); 24 $tmpstr = ''; 25 26 for($i=0; $i< $strlen; $i++) 27 { 28 if($i>=$start && $i< ($start+$sublen)) 29 { 30 if(ord(substr($string, $i, 1))>129) 31 { 32 $tmpstr.= substr($string, $i, 2); 33 } 34 else 35 { 36 $tmpstr.= substr($string, $i, 1); 37 } 38 } 39 if(ord(substr($string, $i, 1))>129) $i++; 40 } 41 if(strlen($tmpstr)< $strlen ) $tmpstr.= "..."; 42 return $tmpstr; 43 } 44 } 45 46 $str = "abcd需要截取的字符串"; 47 echo cut_str($str, 8, 0, 'gb2312'); 48 ?>