注册 登录 欢迎您访问极限源码网:专注各类网站源码下载。

织梦基础知识

该栏目分享织梦建站的基础知识,从织梦CMS的安装,到织梦标签的常规调用,以及织梦的常见问题答疑都有涉及。

当前位置:网站首页 > 建站学院 > 织梦教程 >

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

极限源码网 2019-07-12 17:43 织梦教程

dedecms的cn_substr()和cn_substr_utf8()截取的字符串ms不准,平时也用习惯cn_substr(),也不愿用什么cn_substr_utf8()今天弄了下,现在还是比较准了。按照一个汉字2个字节调用就行了!

方法说明: 
一、找到\include\helpers\string.helper.php把原来约33到102行(也就是定义cn_substr()函数的那段代码)替换掉,你要是怕不行,可以先把这个文件备份下,亲;

Copy to ClipboardLiehuo.Net Codes引用的内容:[www.jxym.net]

/** 
* 中英文截取字符串,汉字安2个字节 

* @access public 
* @param string $str 需要截取的字符串 
* @param int $cutLen 截取的长度 
* @param bool $cutSlashes 是否去掉\ 
* @param bool $addSlashes 是加\ 
* @param string $oDot 截取后加的字符串,如经常用的三个点 
* @param bool $hasHtml 是否有html 
* @return string 
*/ 

01if ( ! function_exists(‘cn_substr’)){

02function cn_substr($str, $cutLen, $oDot = null, $hasHtml = false, $cutSlashes = false, $addSlashes = false) {

03global $cfg_soft_lang;

04$str = trim ( $str );

05if ($cutSlashes) $str = stripslashes ( $str );

06if($hasHtml){

07$str = preg_replace ( “/(\<[^\<]*\>|\r|\n|\s|\[.+?\])/is”, ‘ ‘, $str );

08$str = htmlspecialchars ( $str );

09}else{

10$str = htmlspecialchars ( $str );

11}

12if ($cutLen && strlen ( $str ) > $cutLen) {

13$nStr = ”;

14if ($cfg_soft_lang == ‘utf-8′) {

15$n = 0;

16$tn = 0;

17$noc = 0;

18while ( $n < strlen ( $str ) ) {

19$t = ord ( $str [$n] );

20if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {

21$tn = 1;

22$n ++;

23$noc ++;

24} elseif (194 <= $t && $t <= 223) {

25$tn = 2;

26$n += 2;

27$noc += 2;

28} elseif (224 <= $t && $t < 239) {

29$tn = 3;

30$n += 3;

31$noc += 2;

32} elseif (240 <= $t && $t <= 247) {

33$tn = 4;

34$n += 4;

35$noc += 2;

36} elseif (248 <= $t && $t <= 251) {

37$tn = 5;

38$n += 5;

39$noc += 2;

40} elseif ($t == 252 || $t == 253) {

41$tn = 6;

42$n += 6;

43$noc += 2;

44} else {

45$n ++;

46}

47if ($noc >= $cutLen)break;

48}

49if ($noc > $cutLen) $n -= $tn;

50$nStr = substr ( $str, 0, $n );

51} else {

52for($i = 0; $i < $cutLen – 1; $i ++) {

53if (ord ( $str [$i] ) > 127) {

54$nStr .= $str [$i] . $str [$i + 1];

55$i ++;

56} else {

57$nStr .= $str [$i];

58}

59}

60}

61$str = $nStr . $oDot;

62}

63if ($addSlashes) $str = addslashes ( $str );

64$str = htmlspecialchars_decode ( $str );

65return trim ( $str );

66}

67}

二、全站都使用cn_substr()函数,不管你程序是gbk还是utf8; 
比如你要调用10个字(拼音汉字混杂):[field:title function='cn_substr(@me,20)']即可


    服务项目

    源码下载

    关于我们

    极限源码网| https://www.jxym.net

    极限源码网(JXYM.NET)由一批热爱网页设计、敢于追求梦想、努力付诸行动的热火青年联合打造,在我们的努力之下,让您拥有一个全方位的源码下载平台