/**
* 中文截取,单字节截取模式
* @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个汉字