WordPress 日志摘要截断的补充说明

一年前(好久远了……),我介绍过 WordPress 3种日志摘要方法,其中强烈推荐了第三种方法,也就是这一年多来我一直在用的方法,mb_strimwidth() 函数,对于中文用户来说,这个函数是相当实用的,因为很多摘要的方法都会把中文字截断出乱码,因为中文字在 UTF-8 编码下占三个长度,是一个很尴尬的数字。我记得大叔 ZWW 也介绍过这个 mb_strimwidth() 函数。8过,并不是所有主机都默认支持这个函数的,前提是要开启 mb_string 这个模块。那如果主机没有开启 mb_string 就不能使用 mb_strimwidth() 函数了吗?有没有变通的办法呢?答案当然是 YES,于是也就有了本文。

先在 WordPress 主题的 functions.php 文件中添加如下代码:

function dm_strimwidth($str ,$start , $width ,$trimmarker ){
    $output = preg_replace('/^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$start.'}((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$width.'}).*/s','\1',$str);
    return $output.$trimmarker;
}

接下来在需要的地方调用如下:

<?php echo dm_strimwidth(strip_tags($post->post_content),0,200,'<a href="'.get_permalink().'">......[阅读全文]</a>');?>

这招是从 domety 那里学来的,看到了没,又是我们伟大而又无敌的正则表达示,我现在对正则是佩服地五体投地,仰慕之情犹如滔滔江水连绵不绝啊。用过 mb_strimwidth() 函数的朋友已经发现了,这个新建的函数和 mb_strimwidth() 的用法是一模一样的,如果你的主机不支持 mb_string 扩展库,那可以试试本文的方法哟。

  1. Pingback: WordPress-不用插件输出首页摘要 - 零·界点

  2. 这个与mb_strimwidth() 在字符数上面的截取有差别??我在本地发了网站同一篇文章,大家都截取290个字符,结果本地采用你全银河通用的方法..截取多了很多耶..

  3. 这个是否万能代码?嘿嘿。发现原来自己的主题是使用mb_strimwidth() 这个函数滴。如果是万能代码,什么主机都能用,我把这个替换上去,嘿嘿嘿