导语
一直在设计WordPress主题,有时在博客首页不想显示全文,而只输出指定数量的内容,我们就可以使用mb_strimwidth函数用于文章的截断。ZWWoOoOo那里有针对mb_strimwidth函数的介绍,传送门:《mb_strimwidth函数的简单应用》。但如果你是用UTF代码写的,在截断汉字时有时会出现把汉字一分为二并出现乱码的情况,下面是mb_strimwidth函数的使用及乱码解决办法。
mb_strimwidth参数说明
mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker [, string $encoding ]] )
$str //指定字符串
$start //指定从何处开始截取
$width //截取文字的宽度
$trimmarker //超过$width数字后显示的字符串
例一、限制文章标题文字个数
如我侧边栏的“Random Posts”和“Recent Posts”,因为侧边栏宽度有限,所以对于长文章标题会出现两行,这样有点影响美观,这时就可以用mb_strimwidth函数来限制文字个数在一行内。
文章标题的调用函数一般是这样:
<?php the_title(); ?>
我主题的侧边栏最多大概显示20个中文,所以可以限制在18个文字内,使用mb_strimwidth函数后变成如下:
<?php echo mb_strimwidth(get_the_title(), 0, 36,”…”); ?>
其中 36 代表 18 个双字节文字。
例二、最新评论的文字个数
liveme这里的最新评论长度是 用css的overflow:hidden属性来隐藏评论长度,使他在一行显示。这是因为liveme这里有表情图片输出,不知为啥表情图片占用的字符数 特别多,满足了表情图片的字符数后,评论输出又有几行了。于是干脆用overflow:hidden来控制就可以了。只是后面没有了省略号。如果你网站的 评论没有表情输出,或者你不在乎的话,也可以试试用mb_strimwidth函数来截取固定的文字数量。
最新评论代码中评论内容是:strip_tags($rc_comm->comment_content)
用mb_strimwidth函数限制文字变成:mb_strimwidth(strip_tags($rc_comm->comment_content), 0, 36,”…”)
很方便的一个函数,还有其他应用就自己举一反三吧,mb_strimwidth()是php的函数,所以不依赖wp的版本。
截断函数出现乱码的解决
有些朋友折腾了之后,发现,不行呀,出现乱码呢!嗯,别急,这不是函数出问题,而是你的空间服务器没有打开mb_string extension服务。解决的方法是用sub_str来实现文字截断:
1、将以下代码放加入到function.php 文件
function cut_str($sourcestr,$cutlength){$returnstr=””;$i=0;$n=0;$str_length=strlen($sourcestr);//字符串的字节数while (($n<$cutlength) and ($i<=$str_length)){$temp_str=substr($sourcestr,$i,1);$ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码if ($ascnum>=224) //如果ASCII位高与224,{$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符$i=$i+3; //实际Byte计为3$n++; //字串长度计1}elseif ($ascnum>=192) //如果ASCII位高与192,{$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符$i=$i+2; //实际Byte计为2$n++; //字串长度计1}elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,{$returnstr=$returnstr.substr($sourcestr,$i,1);$i=$i+1; //实际的Byte数仍计1个$n++; //但考虑整体美观,大写字母计成一个高位字符}else //其他情况下,包括小写字母和半角标点符号,{$returnstr=$returnstr.substr($sourcestr,$i,1);$i=$i+1; //实际的Byte数计1个$n=$n+0.5; //小写字母和半角标点等与半个高位字符宽…}}if ($str_length>$cutlength){$returnstr = $returnstr . “…”;//超过长度时在尾处加上省略号}return $returnstr;}
2、调用方法
跟mb_strimwidth函数类似,举个相对比的例子:
用mb_strimwidth函数:
<?php echo mb_strimwidth(strip_tags(apply_filters(‘the_content’, $post->post_content)), 0, 36,”…”); ?>
用sub_str:
<?php echo cut_str(strip_tags(apply_filters(‘the_content’, $post->post_content)),36,”…”); ?>
虽然完全不懂。来了就顶一下。。楼主加油。