瓦窑源码 快速建站好帮手
客服QQ客服QQ 微信号微信号

织梦dedecms如何使用cn_substr截取字数更准确

本文介绍了织梦dedecms如何使用cn_substr截取字数更准确,解决思路:打开这个文件string.helper.php,根据教程修改为新的代码就可以了,然后使用新的调用代码[field:title function= cn_substr(@me,20) ]就可以了。

织梦网站源码

织梦dedecms如何使用cn_substr截取字数更准确?一起来看看处理方法。

打开 include/helpers/string.helper.php 文件,找到如下代码(大约33到102行)

/**

 *  中文截取2,单字节截取模式

 *

 * @access    public

 * @param     string  $str  需要截取的字符串

 * @param     int  $slen  截取的长度

 * @param     int  $startdd  开始标记处

 * @return    string

 */

if ( ! function_exists('cn_substr'))

{

    function cn_substr($str, $slen, $startdd=0)

    {

        global $cfg_soft_lang;

        if($cfg_soft_lang=='utf-8')

        {

            return cn_substr_utf8($str, $slen, $startdd);

        }

        $restr = '';

        $c = '';

        $str_len = strlen($str);

        if($str_len < $startdd+1)

        {

            return '';

        }

        if($str_len < $startdd + $slen || $slen==0)

        {

            $slen = $str_len - $startdd;

        }

        $enddd = $startdd + $slen - 1;

        for($i=0;$i<$str_len;$i++)

        {

            if($startdd==0)

            {

                $restr .= $c;

            }

            else if($i > $startdd)

            {

                $restr .= $c;

            }

            if(ord($str[$i])>0x80)

            {

                if($str_len>$i+1)

                {

                    $c = $str[$i].$str[$i+1];

                }

                $i++;

            }

            else

            {

                $c = $str[$i];

            }

            if($i >= $enddd)

            {

                if(strlen($restr)+strlen($c)>$slen)

                {

                    break;

                }

                else

                {

                    $restr .= $c;

                    break;

                }

            }

        }

        return $restr;

    }

}

替换为

/**

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

*

* @access public

* @param string $str 需要截取的字符串

* @param int $cutLen 截取的长度

* @param bool $cutSlashes 是否去掉\

* @param bool $addSlashes 是加\

* @param string $oDot 截取后加的字符串,如经常用的三个点

* @param bool $hasHtml 是否有html

* @return string

*/

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 ( “/(\<[^\<]*\>|\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 );

return trim ( $str );

}

}

修改后全站都可以使用cn_substr()函数,不管你的程序编码是gbk还是utf8

示例:调用10个字(拼音汉字混杂)

[field:title function='cn_substr(@me,20)']

以上就是关于织梦截取字数的所有内容,希望可以帮到大家,欢迎扫码加微信一起交流~

微信公众号

TAG标签:织梦截取字数

上一个:织梦dedecms怎么在文章列表语句做IF判断
下一个:织梦dedecms如何使用自定义函数

瓦窑源码专注织梦网站源码与静态模板分享,提供织梦模板,dedecms模板,织梦企业源码,dedecms商业源码和织梦免费模板下载

织梦源码 - 织梦模板 - 网页素材 - 织梦教程 - 站长学院 - 热门排行 - Tags标签 - 网站地图 - 免责声明

Copyright©2021 瓦窑源码 Why114.COM 版权所有 鲁ICP备20017802号-2

客服QQ:1847629575 微信号:qilujianzhan

展开