php 截取字符串

Posted on 2013-12-19 13:55  xymst  阅读(186)  评论(0)    收藏  举报

方法一: /* * 截取字符创 * @$string 要截取的字符串 * @$start 截取的位置 * @$length 截取的长度 * @$dot */ function GBsubstr($string,$start = 0, $length, $dot = '...'){ if(strlen($string) > $length){ $str = null; $len = $start +$length; for($i=$start; $i<$len;$i++){ if(ord(substr($string,$i,1)) > 0xa0 ){ $str .= substr($string,$i,2); $i++; }else{ $str .= substr($string, $i, 1); } } $return_str = $str.$dot; return $return_str; }else{ return $string; } } 方法二: /** * 字符截取 支持UTF8/GBK * @param $string 截取字符串 * @param $length 截取长度 * @param $dot 连接符 * @param $charset 字符编码 */ function str_cut($string, $length,$charset = 'UTF-8', $dot = '...') { $strlen = strlen($string); if($strlen <= $length) return $string; $string = str_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array('∵',' ', '&', '"', "'", '"', '"', '—', '<', '>', '·', '…'), $string); $strcut = ''; if(strtolower($charset) == 'utf-8') { $length = intval($length-strlen($dot)-$length/3); $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); $strcut = str_replace(array('∵', '&', '"', "'", '"', '"', '—', '<', '>', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), $strcut); } else { $dotlen = strlen($dot); $maxi = $length - $dotlen - 1; $current_str = ''; $search_arr = array('&',' ', '"', "'", '"', '"', '—', '<', '>', '·', '…','∵'); $replace_arr = array('&',' ', '"', ''', '“', '”', '—', '<', '>', '·', '…',' '); $search_flip = array_flip($search_arr); for ($i = 0; $i < $maxi; $i++) { $current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i]; if (in_array($current_str, $search_arr)) { $key = $search_flip[$current_str]; $current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str); } $strcut .= $current_str; } } return $strcut.$dot; }

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3