根据中文裁减字符串,截取指定长度的字串内容。
代码如下:
<?php /** * 截取指定长度的字符串 * func: cutstr $string字符串,$length长度,$dot超出部分 * edit: www.jb200.com */ function cutstr($string,$length, $dot = ' ...') { if (strlen($string) <= $length) { return$string; } $pre = chr(1); $end = chr(1); $string = str_replace(array('&','"', '<', '>'),array($pre . '&'. $end, $pre . '"' . $end, $pre . '<' .$end, $pre . '>' . $end), $string); $strcut = ''; if (strtolower(CHARSET) == 'utf-8'){ $n = $tn =$noc = 0; while ($n< strlen($string)) { $t =ord($string[$n]); if ($t == 9 || $t == 10 || (32<= $t && $t <= 126)) { $tn = 1; $n++; $noc++; } elseif (194 <= $t&& $t <= 223) { $tn = 2; $n += 2; $noc += 2; } elseif (224 <= $t&& $t <= 239) { $tn = 3; $n += 3; $noc += 2; } elseif (240 <= $t&& $t <= 247) { $tn = 4; $n += 4; $noc += 2; } elseif (248 <= $t&& $t <= 251) { $tn = 5; $n += 5; $noc += 2; } elseif ($t == 252 || $t ==253) { $tn = 6; $n += 6; $noc += 2; } else { $n++; } if ($noc >= $length){ break; } } if ($noc> $length) { $n -= $tn; } $strcut =substr($string, 0, $n); } else { for ($i =0; $i < $length; $i++) { $strcut .= ord($string[$i])> 127 ? $string[$i] . $string[++$i] : $string[$i]; } } $strcut = str_replace(array($pre . '&' .$end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' .$end), array('&', '"','<', '>'), $strcut); $pos = strrpos($strcut, chr(1)); if ($pos !== false) { $strcut =substr($strcut, 0, $pos); } return $strcut . $dot; } ?>