,dedecms的cn_substr()和cn_substr_utf8()截取的字符串ms不準,平時也用習慣cn_substr(),也不愿用什么cn_substr_utf8()今天弄了下,現(xiàn)在還是比較準了。按照一個漢字2個字節(jié)調(diào)用就行了!
方法說明:
一、找到includehelpersstring.helper.php把原來約33到102行(也就是定義cn_substr()函數(shù)的那段代碼)替換掉,你要是怕不行,可以先把這個文件備份下,親;
-
/**
-
*中英文截取字符串,漢字安2個字節(jié)
-
*
-
* @accesspublic
-
* @param string$str 需要截取的字符串
-
* @param int$cutLen 截取的長度
-
* @param bool $cutSlashes 是否去掉
-
* @param bool $addSlashes 是加
-
* @param string $oDot 截取后加的字符串,如經(jīng)常用的三個點
-
* @param bool $hasHtml 是否有html
-
* @returnstring
-
*/
-
if ( ! function_exists(‘cn_substr’)){
-
function cn_substr($str, $cutLen, $oDot = null, $hasHtml = false, $cutSlashes = false, $addSlashes = false) {
-
global $cfg_soft_lang;
-
$str = trim ( $str );
-
if ($cutSlashes) $str = stripslashes ( $str );
-
if($hasHtml){
-
$str = preg_replace ( “/(&;[^&;]*&;| | |s|[.+?])/is”, ‘ ‘, $str );
-
$str = htmlspecialchars ( $str );
-
}else{
-
$str = htmlspecialchars ( $str );
-
}
-
if ($cutLen && strlen ( $str ) > $cutLen) {
-
$nStr = ”;
-
if ($cfg_soft_lang == ‘utf-8′) {
-
$n = 0;
-
$tn = 0;
-
$noc = 0;
-
while ( $n < strlen ( $str ) ) {
-
$t = ord ( $str [$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 >= $cutLen)break;
-
}
-
if ($noc > $cutLen) $n -= $tn;
-
$nStr = substr ( $str, 0, $n );
-
} else {
-
for($i = 0; $i < $cutLen – 1; $i ++) {
-
if (ord ( $str [$i] ) > 127) {
-
$nStr .= $str [$i] . $str [$i + 1];
-
$i ++;
-
} else {
-
$nStr .= $str [$i];
-
}
-
}
-
}
-
$str = $nStr . $oDot;
-
}
-
if ($addSlashes) $str = addslashes ( $str );
-
$str = htmlspecialchars_decode ( $str );
-
return trim ( $str );
-
}
-
}
二、全站都使用cn_substr()函數(shù),不管你程序是gbk還是utf8;
比如你要調(diào)用10個字(拼音漢字混雜):[field:title function='cn_substr(@me,20)']即可