dedecms重新定义cn_substr函数截取字数更准确
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>方法说明:</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
一、找到\include\helpers\string.helper.php把原来约33到102行(也就是定义cn_substr()函数的那段代码)替换掉,你要是怕不行,可以先把这个文件备份下,亲;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
</p>
<div class="msgheader" style='margin: 3px auto 0px; padding: 0px 3px; outline: none; line-height: 21.6px; clear: both; border-width: 1px; border-style: solid; border-color: rgb(0, 153, 204); background: rgb(246, 251, 255); overflow: hidden; font-family: tahoma, arial, "Microsoft YaHei";'>
<div class="right">
<span><u>复制代码</u></span>
</div>
代码如下:</div>
<div class="msgborder" id="phpcode13" style='margin: 0px auto 3px; padding: 0px 3px; outline: none; line-height: 25.2px; font-size: 14px; clear: both; border-right: 1px solid rgb(0, 153, 204); background: rgb(221, 237, 251); overflow: hidden; border-left: 1px solid rgb(0, 153, 204); word-break: break-all; border-bottom: 1px solid rgb(0, 153, 204); word-wrap: break-word; font-family: tahoma, arial, "Microsoft YaHei";'>
<br>
/** <br>
* 中英文截取字符串,汉字安2个字节 <br>
* <br>
* @access public <br>
* @param string $str 需要截取的字符串 <br>
* @param int $cutLen 截取的长度 <br>
* @param bool $cutSlashes 是否去掉\ <br>
* @param bool $addSlashes 是加\ <br>
* @param string $oDot 截取后加的字符串,如经常用的三个点 <br>
* @param bool $hasHtml 是否有html <br>
* @return string <br>
*/ <br>
if ( ! function_exists(‘cn_substr’)){ <br>
function cn_substr($str, $cutLen, $oDot = null, $hasHtml = false, $cutSlashes = false, $addSlashes = false) { <br>
global $cfg_soft_lang; <br>
$str = trim ( $str ); <br>
if ($cutSlashes) $str = stripslashes ( $str ); <br>
if($hasHtml){ <br>
$str = preg_replace ( “/(\<[^\<]*\>|\r|\n|\s|\[.+?\])/is”, ‘ ‘, $str ); <br>
$str = htmlspecialchars ( $str ); <br>
}else{ <br>
$str = htmlspecialchars ( $str ); <br>
} <br>
if ($cutLen && strlen ( $str ) > $cutLen) { <br>
$nStr = ”; <br>
if ($cfg_soft_lang == ‘utf-8′) { <br>
$n = 0; <br>
$tn = 0; <br>
$noc = 0; <br>
while ( $n < strlen ( $str ) ) { <br>
$t = ord ( $str [$n] ); <br>
if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { <br>
$tn = 1; <br>
$n ++; <br>
$noc ++; <br>
} elseif (194 <= $t && $t <= 223) { <br>
$tn = 2; <br>
$n += 2; <br>
$noc += 2; <br>
} elseif (224 <= $t && $t < 239) { <br>
$tn = 3; <br>
$n += 3; <br>
$noc += 2; <br>
} elseif (240 <= $t && $t <= 247) { <br>
$tn = 4; <br>
$n += 4; <br>
$noc += 2; <br>
} elseif (248 <= $t && $t <= 251) { <br>
$tn = 5; <br>
$n += 5; <br>
$noc += 2; <br>
} elseif ($t == 252 || $t == 253) { <br>
$tn = 6; <br>
$n += 6; <br>
$noc += 2; <br>
} else { <br>
$n ++; <br>
} <br>
if ($noc >= $cutLen)break; <br>
} <br>
if ($noc > $cutLen) $n -= $tn; <br>
$nStr = substr ( $str, 0, $n ); <br>
} else { <br>
for($i = 0; $i < $cutLen – 1; $i ++) { <br>
if (ord ( $str [$i] ) > 127) { <br>
$nStr .= $str [$i] . $str [$i + 1]; <br>
$i ++; <br>
} else { <br>
$nStr .= $str [$i]; <br>
} <br>
} <br>
} <br>
$str = $nStr . $oDot; <br>
} <br>
if ($addSlashes) $str = addslashes ( $str ); <br>
$str = htmlspecialchars_decode ( $str ); <br>
return trim ( $str ); <br>
} <br>
} </div>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
二、全站都使用cn_substr()函数,不管你程序是gbk还是utf8;</p>
<p style='margin: 0px; padding: 5px 0px; outline: none; font-size: 14px; line-height: 30px; font-family: tahoma, arial, "Microsoft YaHei";'>
比如你要调用10个字(拼音汉字混杂):即可</p>
頁:
[1]