無法使用mb_strimwidth的常見解決方法
-
liveme导语
昨天折腾了一个函数的用法,有细心留意的童鞋会发现网站整齐了点,为什么?侧边栏的最热留言等,还有首页中间的四个栏目输出的文章标题全部变成了只有一行,后面多出的就有省略号表示了。这就是用到了一个php函数:mb_strimwidth,主要用于文章的截断。主要是参考了ZWWoOoOo那里介绍的,传送门:《mb_strimwidth函数的简单应用》。不过我这里介绍的除了zww那里介绍的之外,还提供了一种解决乱码的方案。
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,”…”); ?>
- The topic ‘無法使用mb_strimwidth的常見解決方法’ is closed to new replies.