Dream Maker 老漂 不要有和人斗的心,你要赢的是你自己!

php统计中文字数

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)更合适?

归结起来,统计字符串中英文字数的示例:

$str = 'i am  a 中英文混合的 string';$str = preg_replace('/[\x80-\xff]{1,3}/', ' ', $str,-1,$n);$n += str_word_count($str);

变量$n的值即为总字数,本例$n的值为10。

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

Tags: php

发布: 老漂 分类: 网站|站长 评论: 0 浏览: 756
留言列表
发表留言
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。