haidong 发表于 2010-2-24 13:43:39

Utf-8、gb2312都支持的汉字截取

&lt;?php<BR><BR>/***************************************************************************<BR>* cut_string.php<BR>* ------------------------------<BR>* Date : Jul 16, 2005<BR>* Copyright : none<BR>* Mail : <BR>*<BR>* 作用:截取中文字符.<BR>*<BR>*<BR>***************************************************************************/<BR><BR>function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')<BR>{<BR>if($code == 'UTF-8')<BR>{<BR>$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]/";<BR>preg_match_all($pa, $string, $t_string);<BR><BR>if(count($t_string) - $start &gt; $sublen) return join('', array_slice($t_string, $start, $sublen))."...";<BR>return join('', array_slice($t_string, $start, $sublen));<BR>}<BR>else<BR>{<BR>$start = $start*2;<BR>$sublen = $sublen*2;<BR>$strlen = strlen($string);<BR>$tmpstr = '';<BR>for($i=0; $i&lt;$strlen; $i++)<BR>{<BR>if($i&gt;=$start &amp;&amp; $i&lt;($start+$sublen))<BR>{<BR>if(ord(substr($string, $i, 1))&gt;129) $tmpstr.= substr($string, $i, 2);<BR>else $tmpstr.= substr($string, $i, 1);<BR>} <BR>if(ord(substr($string, $i, 1))&gt;129) $i++;<BR>}<BR>if(strlen($tmpstr)&lt;$strlen ) $tmpstr.= "...";<BR>return $tmpstr;<BR>}<BR>}<BR><BR>?&gt;<BR><BR><BR>cut_str(字符串, 截取长度, 开始长度, 编码);<BR>编码默认为 utf-8<BR>开始长度默认为 0
页: [1]
查看完整版本: Utf-8、gb2312都支持的汉字截取