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

所属分类: CMS教程 / dedecms 阅读数: 920
收藏 0 赞 0 分享

方法说明:

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


复制代码
代码如下:

/**
* 中英文截取字符串,汉字安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)']即可

更多精彩内容其他人还在看

脚本之家使用火车头发布DEDECMS 5.5 出现乱码的解决办法

今天做了一个站测试用,由于是新站没有太多时候去添加内容,就想到用火车头来采集。采集的工作比较顺利。
收藏 0 赞 0 分享

dedecms 列表页标题修改图文方法(利于优化)

dedecms实现
收藏 0 赞 0 分享

DEDECMS 5.1的SEO技巧之栏目列表页优化

本人刚接触DEDECMS系统还不到半,觉得DEDE系统不错,很好优化,我现在介绍一下我在使用过程中的SEO技巧,希望给初学者一些帮助
收藏 0 赞 0 分享

DeDeCms V5.6 数据批量索引到淘特搜索引擎

由于DedeCms没有将文章的生成地址保存在数据库中,因此需要做的就是索引一个字段:LinkUrl来保存文章生成地址。
收藏 0 赞 0 分享

dedecms 问答系统取消积分与用户登陆验证的方法

现在我要用dedecms来做一个问答功能,功能是不需要用户登陆并可以提问,因为问题时需要积分所以我把登际与积分都取消了。
收藏 0 赞 0 分享

dedecms 5.3/5.5全站伪静态含SEO重复记录优化

DEDECMS系统栏目、文章页面、分页面伪静态和域名301重定向详细方法
收藏 0 赞 0 分享

dedecms 每个栏目下的文章总数的调用

实现统计每个栏目下的文章总数的调用修改方法,经网友测试基本上没有问题。
收藏 0 赞 0 分享

dedecms制作英文站需要修改的地方

我一直都不喜欢用DEDE做英文站,不是不好,而是需要改动的地方太多了,并不像一些网上说的改改字体,改改编码那么轻松的事情。
收藏 0 赞 0 分享

dedecms英文模板 英文网站程序的选择

dedecms英文模板目前很多,但一眼看上去都是一些老版本了,而且卖模板的人说是SEO过,其实网站程序的优化都没有做好,还不如自己动手改改 dedecms官方默认的模板。
收藏 0 赞 0 分享

DEDECMS 支付宝操作手册

织梦CMS携手支付宝推出DedeCMS V5.6全新支付接口,DedeCMS系统为国内做早开源的PHP内容管理系统,系统除了拥有强大,灵活的内容管理功能之外,还增加了分类、书库、黄页、圈子、问答等模块,同时该版本中整合了最新支付宝在线支付接口。
收藏 0 赞 0 分享
查看更多