dedecms怎么重新定义cn_substr函数截取字数更准确?
dedecms的cn_substr()和cn_substr_utf8()截取的字符串ms不准,平时也用习惯cn_substr(),也不愿用什么cn_substr_utf8()今天弄了下,现在还是比较准了。按照一个汉字2个字节调用就行了
推荐学习:织梦cms
方法说明:
一、找到\include\helpers\string.helper.php把原来约33到102行(也就是定义cn_substr()函数的那段代码)替换掉,你要是怕不行,可以先把这个文件备份下,亲;
代码如下:
if(!function_exists(‘cn_substr’)){functioncn_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(“/(\<[^\<]*\>|\r|\n|\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);returntrim($str);}}