关于统计文章字数这个功能最初我是在简书上看到的,现在在自己博客上我也想应用这个功能,便在网上寻找相关插件,找到一个比较满意的插件如下,并根据自己的需求,做了适当修改。
插件来源 https://blog.ela.moe/archives/255/
GitHub项目地址 https://github.com/elatisy/Typecho_WordsCounter
WordsCounter
Typecho文章字数统计 & 全站字数统计插件
可在设置里调是否统计隐藏/私有文章字数
注意: 文件夹名字必须为WordsCounter才能正常使用
Usage
文章字数统计
在你想要输出的地方加上
<?php $this->charactersNum(); ?>
全站字数统计
在你想要输出的地方加上
<?php WordsCounter_Plugin::allOfCharacters(); ?>
修改
但是该插件并没有区分中文和英文字符,对于程序猿来说,在文章中无意会涉及到大量的代码,将这些代码都按照字数进行统计的话,那么每篇文章的字数是相当大的,所以我查阅了相关资料,对插件进行了相关修改,使其只统计中文的字符数。
将原来的 Plugins.php
文件中的统计单个文章的字数和统计全站字数的代码进行修改如下,其他地方均不变。
单个文章中中文字数
public static function charactersNum($archive) {
$text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $archive->text);
return mb_strlen($text,'UTF-8');
// return mb_strlen($archive->text,'UTF-8');
}
全站文章中文字数
与上文方法类似,关键就是要在计算长度之前将文章中的中文过滤出来,此处不再赘述。
PHP统计字符长度
echo strlen("你好ABC") . "";
# 输出 9
echo mb_strlen("你好ABC", 'UTF-8') . "";
# 输出 5
echo mb_strwidth("你好ABC") . "";
# 输出 7
strlen 把中文字符算成 3 个字节,mb_strlen 不管中文还是英文,都算 1 个字节,而 mb_strwidth 则把中文算成 2 个字节,所以 mb_strwidth 才是我们想要的:中文 2 个字节,英文 1 个字节。