设为首页收藏本站
开启辅助访问
切换到宽版

创星网络[分享知识 传递快乐]

 找回密码
 立即注册

QQ登录

只需一步,快速开始

用新浪微博登录

只需一步,快速搞定

搜索
查看: 4601|回复: 0
打印 上一主题 下一主题

php统计中文字数

[复制链接]

我玩的应用:

跳转到指定楼层
楼主
发表于 2012-12-1 22:41:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
php的strlen和mb_strlen用于统计字符个数。而str_word_count只能统计英文字数,中英文混合的字符串中的中文字符则没有统计进来。所以得自己另想方法统计中英文混合的字符串的字数。

可以这样做:
先用正则表达式统计字符串的中文字数,并把所有中文替换为空格,剩下的都是英文字符,就可以用str_word_count统计英文字数了,最后中文字数与英文字数之和就是总字数了。

这里的讨论都是在utf-8编码情况下。
统计中文字数并把所有中文替换为空格的正则表达式:
preg_replace(‘/[\x80-\xff]{3}/’, ‘ ‘, $str,-1,$n1);
变量$n记录了被替换的总次数,也就是中文字符个数。
上面的正则表达式基于这样的假设:所以中文字符的utf-8都占3个字节。 但我看到网上有人说:并不是所有utf-8中文都是3个字节,在0080 – 07FF码段为2字节,在0800 – FFFF码段为3字节。那么是不是用preg_replace(‘/[\x80-\xff]{1,3}/’, ‘ ‘, $str,-1,$n)更合适?

归结起来,统计字符串中英文字数的示例:
  1. $str = 'i am  a 中英文混合的 string';
  2. $str = preg_replace('/[\x80-\xff]{1,3}/', ' ', $str,-1,$n);
  3. $n += str_word_count($str);
复制代码
变量$n的值即为总字数,本例$n的值为10。

ps:上面的做法,中文标点符号(所有中文特殊符号)也是算在内的,而str_word_count统计的英文字数则不包含标点符号。如果不想把标点符号考虑进来,需要先过滤掉中文特殊符号,再进行统计。上面的做法与office word字数统计的区别在于,office word不仅统计中文标点符号,而且也统计英文标点符号。所以office word统计的字数要大一点,大于的部分就是英文标点符号的个数。


from:http://www.zhounaiming.com/entry/111
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|创星网络 ( 苏ICP备11027519号|网站地图  

GMT+8, 2024-5-2 09:24 , Processed in 0.078269 second(s), 28 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表