亲注册登录道勤网-可以查看更多帖子内容哦!(包涵精彩图片、文字详情等)请您及时注册登录-www.daoqin.net
您需要 登录 才可以下载或查看,没有账号?立即注册
x
给discuz写模板的时候需要对字符串进行截取,可以使用cutstr方法来截取。请看实现代码:
<!--{eval echo cutstr($value['subject'],30,'');}-->
cutstr方法代码如下
- /**
- * [discuz] 基于PHP没有安装 mb_substr 等扩展截取字符串,如果截取中文字则按2个字符计算
- * @param $string 要截取的字符串
- * @param $length 要截取的字符数
- * @param $dot 替换截掉部分的结尾字符串
- * @return 返回截取后的字符串
- */
- function cutstr($string, $length, $dot = '...') {
- // 如果字符串小于要截取的长度则直接返回
- // 此处使用strlen获取字符串长度有很大的弊病,比如对字符串“新年快乐”要截取4个中文字符,
- // 那么必须知道这4个中文字符的字节数,否则返回的字符串可能会是“新年快乐...”
- if (strlen($string) <= $length) {
- return $string;
- }
- // 转换原字符串中htmlspecialchars
- $pre = chr(1);
- $end = chr(1);
- $string = str_replace ( array ('&', '"', '<', '>' ), array ($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), $string );
- $strcut = ''; // 初始化返回值
- // 如果是utf-8编码(这个判断有点不全,有可能是utf8)
- if (strtolower ( CHARSET ) == 'utf-8') {
- // 初始连续循环指针$n,最后一个字位数$tn,截取的字符数$noc
- $n = $tn = $noc = 0;
- while ( $n < strlen ( $string ) ) {
- $t = ord ( $string [$n] );
- if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
- // 如果是英语半角符号等,$n指针后移1位,$tn最后字是1位
- $tn = 1;
- $n++;
- $noc++;
- } elseif (194 <= $t && $t <= 223) {
- // 如果是二字节字符$n指针后移2位,$tn最后字是2位
- $tn = 2;
- $n += 2;
- $noc += 2;
- } elseif (224 <= $t && $t <= 239) {
- // 如果是三字节(可以理解为中字词),$n后移3位,$tn最后字是3位
- $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 >= $length) {
- break;
- }
- }
- // 这个地方是把最后一个字去掉,以备加$dot
- if ($noc > $length) {
- $n -= $tn;
- }
- $strcut = substr ( $string, 0, $n );
- } else {
- // 并非utf-8编码的全角就后移2位
- for ($i = 0; $i < $length; $i ++) {
- $strcut .= ord ( $string [$i] ) > 127 ? $string [$i] . $string [++ $i] : $string [$i];
- }
- }
- // 再还原最初的htmlspecialchars
- $strcut = str_replace( array ($pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), array ('&', '"', '<', '>' ), $strcut );
- $pos = strrpos ( $strcut, chr ( 1 ) );
- if ($pos !== false) {
- $strcut = substr ( $strcut, 0, $pos );
- }
- return $strcut . $dot; // 最后把截取加上$dot输出
- }
复制代码
道勤主机提供365天*24小时全年全天无休、实时在线、零等待的售后技术支持。竭力为您免费处理您在使用道勤主机过程中所遇到的一切问题!
如果您是道勤主机用户,那么您可以通过QQ【792472177】、售后QQ【59133755】、旺旺【诠释意念】、微信:q792472177免费电话、后台提交工单这些方式联系道勤主机客服!
如果您不是我们的客户也没问题,点击页面最右边的企业QQ在线咨询图标联系我们并购买后,我们为您免费进行无缝搬家服务,让您享受网站零访问延迟的迁移到道勤主机的服务! |