2010年07月08日 78条评论

mb_strimwidth函数的简单应用

在《简单的文章截断方法, 支持 Read more 加上 nofollow》一文中所使用的文章截断是使用mb_strimwidth函数来实现的,其实稍微想想就可以发现很多地方都可以使用这个函数,下面说明一下和举一些例子。

先说说mb_strimwidth函数

mb_strimwidth是超轻量级的php函数,用来获取指定的宽度截断字符串。

使用方法

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 个双字节文字

例二、最新评论的文字个数

上篇文章《带头像显示的最新评论代码 - 蛋疼篇》里面的最新评论长度是用css的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的版本。

zww
or
oooo

“mb_strimwidth函数的简单应用”有78条评论

  1. A.shun says:

    看不懂。。。继续more截断

    用opera 10.70路过

  2. 牵手博客网做个调查:
    1、你做站是否只在站长圈做推广?
    2、你网站上是否挂GG广告或百度联盟?
    3、你是否每天都查看网站统计和广告收入后台?
    4、你的GG广告点击客户是?
    5、你收入是否月入2000以上?

    希望各位站长朋友能够接受调查,答复自己的问题!
    谢谢!

    1. zwwooooo says:

      @牵手博客网 竟然开着ie6来调查……

  3. 阿修 says:

    继续more……

  4. Leo.N says:

    好函数~~~

  5. 不懂 友情支持~
    点点ad~

  6. ForRSS says:

    很实用的函数。

  7. mealdy says:

    你写的怎么都这么有用啊,不敢看了,自卑ing

    1. zwwooooo says:

      @mealdy 这……没啥好自卑

  8. mealdy says:

    标题后面显示...确实很cool

  9. BB霜 says:

    被小图给吸引了

  10. mb_strimwidth用于摘要Wordpress内容以及标题 | 中国开源电子商务解决方案平台 says:

    [...] 参考:http://zww.me/archives/25189 [...]

  11. [...] UTF-8 编码下占三个长度,是一个很尴尬的数字。我记得大叔 ZWW 也介绍过这个 mb_strimwidth() 函数。8过,并不是所有主机都默认支持这个函数的,前提是要开启 mb_string [...]

  12. 百奥博 says:

    这些天一直在思考给一个自定义页面模板实现截断,终于在这里找到答案。我用的是get_the_excerpt

    1. zwwooooo says:

      @百奥博
      其实一直就有你用的函数,因为直接输出是the_excerpt()

  13. 飞晏 says:

    是基于substr()写的吗

    1. zwwooooo says:

      @飞晏
      php内置的

  14. 安啦网 says:

    学习了

  15. liveme says:

    之前搞过截断,但是表情显示不出来。今天又重新弄了下,原来是设置显示的字数太少了 :???:
    顺便提一下,你第一个例子那里,问号前少了个分号

    1. zwwooooo says:

      @liveme
      你真细心,已更正,谢

  16. liveme says:

    今天上去你网站访问不了。
    请教个问题,怎么表情符号占的字符数那么多的?一旦满足了表情显示,需要的字符数非常多,有没有这个函数控制都一样了。

    1. zwwooooo says:

      @liveme
      表情符也不是很多吧,而且完全可以不鸟表情输出。

  17. [...] 一直在设计WordPress主题,有时在博客首页不想显示全文,而只输出指定数量的内容,我们就可以使用mb_strimwidth函数用于文章的截断。ZWWoOoOo那里有针对mb_strimwidth函数的介绍,传送门:《mb_strimwidth函数的简单应用》。但如果你是用UTF代码写的,在截断汉字时有时会出现把汉字一分为二并出现乱码的情况,下面是mb_strimwidth函数的使用及乱码解决办法。 [...]

  18. 请问下博主,我调用最新文章是使用get_archives('postbypost',10)来实现的,请问应该如何截断呢……自己试了下,怎么都没成功,非常感谢 :razz:

    1. zwwooooo says:

      @wuxinxinggg
      用get_posts()吧,在输出标题函数 get_the_title() 下手

  19. youanan says:

    请教一下,如果别人用了

    </br>

    ,还是会出现两行怎么办?

    1. zwwooooo says:

      @youanan
      要先把html标签都过滤掉再截取,另外应该是

      <br />
  20. 侯永禄 says:

    请问这句函数怎么截断:

    php $url = get_post_custom_values("url_value"); echo $url[0];

    请帮助我,谢谢你。

    1. zwwooooo says:

      @侯永禄
      对 $url[0] 截断啊

回复给 飞晏 ¬
取消回复

昵称 *

网址

B em del U Link Code Quote