增加显示文章字数功能

今天想实现显示文章字数的功能。不太懂PHP,在PHP手册里翻了翻,找了一些函数来实现这个功能。

代码如下:

echo mb_strlen(preg_replace('/s/','',html_entity_decode(strip_tags($post->post_content))),'UTF-8');

下面解释一下代码中每个函数的含义:

  • strip_tags:去除字符串中的HTML标签和PHP标签。
  • html_entity_decode:将html实体转回字符,就是说把&lt;转为<。
  • preg_replace('/\s/',",$s):使用正则表达式把字符串中的所有空格、空行去掉。“\s匹配任何空白字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]”[via]
  • mb_strlen:指定字符串使用UTF-8编码,计算字符串长度。这样每个中文字符会被计数为1而不是2。

我把代码加到theloop.php文件中,放在Comments之后,Edit Link之前。测试了一下,把文章的全部文字copy到UEStudio中,然后点搜索->文字统计,字符(不包含空格)一项和页面上显示的字符数刚好一致。就这样先放着吧,淡淡的一个数字,初来的人估计都不知道这是什么。

还有一些问题:

  1. 用了4个函数,可能会对速度有影响,安装前留意一下页面执行时间,跟安装后比较一下吧,影响太大就不要用了。
  2. 统计的字符串直接取用文章的原始字符串,没有经过过滤器的处理,所以当使用了一些插件或者表情的时候会统计错误。当然也可以用apply_filters('the_content', $post->post_content)函数处理一下,不过速度恐怕就要影响很多了。想不出来解决办法,或者用Javascript统计字数会好一些?
  3. 这段代码统计了所有非空白字符,并没有区分英文字符、数字、中文字符、标点。如果要单独统计中文字符的话,只要用正则表达式把中文字符单独取出来就是了。如果Blog使用的是UTF-8编码,那么找出unicode中汉字的编码范围就可以了。我截了幅图,使用Windows自带的字符映射表来查找字符的编码范围。
    字符映射表

什么,你要插件?就这么一行代码还插个头啊,做成插件还要上传,激活,最后还是要修改模板,直接把这么一句代码加模板里还省点事。

本文共有 4 条评论增加显示文章字数功能


  1. 1 Allen

    请问Yskin怎样实现将某个函数插入指定字数之后?
    当然要是放在文章前面或者末尾只需简单修改下single.php
    但是,比如我想在每篇单独的文章的200字处插入一个logo或者我想要的其他信息,
    通过手工修改每篇文章肯定累死人。有没有什么函数实现?

  2. 2 yskin

    呃,可以通过插件来实现,只要在插件里对文章内容进行一下处理就可以了。

    P.S. 恕我直言,在文章内容当中插入一些文字或代码,貌似某些人喜欢在文章当中放Google广告才会有这个需求。

  3. 3 Allen

    呵呵。给点关键提示吧。

  1. 1 IE中打開UTF-8編碼title為中文的網頁會顯示空白頁的問題 | SDpower
    Pingback2007-12-9 6:47 下午

请留下您的评论: