/** * 中文截取,单字节截取模式 * @param string $str 需要截取的字符串 * @param int $slen 截取字符串长度 * @return string $restr 返回的字符串长度 * */ function cn_substr($str,$slen,$startdd=0) { $from = C('DEFAULT_CHARSET'); if( $from == 'utf-8' ){ $str = auto_charset($str, 'utf-8', 'gbk'); } $restr = ""; $c = ""; $str_len = strlen($str); if($str_len < $startdd+1) return ""; if($str_len < $startdd + $slen || $slen==0) $slen = $str_len - $startdd; $enddd = $startdd + $slen - 1; for($i=0;$i<$str_len;$i++){ if($startdd==0) $restr .= $c; else if($i > $startdd) $restr .= $c; if(ord($str[$i])>127){ if($str_len>$i+1) $c = $str[$i].$str[$i+1]; $i++; } else{ $c = $str[$i]; } if($i >= $enddd){ if(strlen($restr)+strlen($c)>$slen) break; else{ $restr .= $c; break; } } } if( $from == 'utf-8' ){ $restr = auto_charset($restr, 'gbk', 'utf-8'); } return $restr; }
由于项目的需要,需要进行中文截取字符串的操作。可是找了一下,并没有发现TS有这个功能。真是有点费解。
于是自己动手写了一个。TS的函数都写在common.php里面,
调用的时候直接在模板中,使用即可。例如 {$bianliang|cn_substr="10"}
这里的10代表10个字符 5个汉字