1.phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中:/** ?* 字符截取 支持UTF8/GBK ?* @param $string ?* @param $length ?* @param $dot ?*/ ?function str_cut($string, $length, $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; ?} ???//weiyanhui自己添加,字符串截取函数,建议使用自己写的字符串截取函数,需要在php.ini中开启php_mbstring.dll扩展 ?function str_cut1($string, $length, $dot = ‘...‘) { ?????return mb_substr($string,0,$length,‘utf-8‘).$dot; ?} ?echo str_cut1("abcdefg",3,"...");//结果:abc...echo str_cut1("我们都是中国人",3,"...");//结果:我们都...不管是字母还是中文,都截取制定的长度
转自:http://blog.csdn.net/yanhui_wei/article/details/8159022
改造phpcms-v9自带的字符串截取函数
原文地址:http://www.cnblogs.com/xiaomifeng/p/8011916.html