dedecms怎么重新定义cn_substr函数截取字数更准确

   2025-07-31 admin00110

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);}}
 
举报收藏 0打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  RSS订阅  |  京ICP备2024057451号-2