PHP如何统计中文汉字的字数?

飘逸的风5年前 (2020-12-01)程序2264

PHP 中如何正确统计中文字数?这个是困扰我很久的问题,PHP 中有很多函数可以计算字符串的长度,比如下面的例子,分别使用了 strlen,mb_strlen,mb_strwidth 这个三个函数去测试统计字符串的长度,看看把中文算成几个字节(以UTF-8编码为例):


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 个字节。

同样截取字符串也建议使用 mb_strimwidth,也是按照 中文 2 个字节,英文 1 个字节 方式计算之后的,并且如果字数超过截取的要求,这个函数还可以在最后面自动添加‘…’。



mb_strimwidth($post_excerpt,0,240,'...','utf-8');
注意,最后添加‘utf-8’编码参数,可以避免中文截取乱码的问题。


相关文章

分享一个生成sitemap.xml的类

很多站长在做seo优化的时候都会向各大搜索引擎网站提交站点地图sitemap.xml,同样需要提交。于是专门写了一个生成sitemap.xml的类,支持生成在制定目录下,默认生成在网站根目录下。 分...

文章内链的实现方法

在很多的时候,我在浏览其他的网站发现文章中一写关键词都被加上了链接链向对应的页面,我就在想他们是怎么实现这个功能的?为什么这么做,这么做有什么好处?   当然有什么好处一看便知,无论是从...

PHP购物车类,简单易用,移植CodeIgniter,并进行一些优化[附带实例]

个人感觉CodeIgniter用起来方便,但有时候做电子商城网站的时候,没有使用CodeIgniter框架,但想用CodeIgniter里的购物车程序,那么就需要对其购物车类进行修改。但CodeIgn...

thinkphp 使用U方法自动生成URL超链接

ThinkPHP U方法 U 方法是 ThinkPHP 内置的一个快捷方法,可以根据系统 URL 模式配置动态的生成智能的 URL 地址。 由于 ThinkPHP 支持各种不同的 URL...

龙圆 php 判断是否为搜索引擎蜘蛛函数 转载

/**  *    判断是否为搜索引擎蜘蛛  *  *    @author&nbs...

PHP无限级分类的简单实现方法

PHP无限级分类的简单实现方法

PHP无限级分类的简单实现方法,请看截图:   代码是:  <?php  header("Content-type: text/html;&n...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。