在下有个文本文件:1.txt 其内容是【注意格式不变】:第1章楔子
Long long ago,三国鼎立,势均力敌,不相上下!分别为北祈、东沐、南缗。其中北祈的力量最为强大些,因为就在两年前,这个骁勇善战的北祈皇上薄奚野带兵灭掉了西楚国。
据民间传言,薄奚野灭掉西楚国的原因是为了一个长的比花还美貌的女子,名曰:花蕊儿,人称“花不足拟其色,似花蕊之翮轻”故名“花蕊夫人”。
这位花蕊夫人的美貌,曾经有一位大诗人曾经写过一首诗:
冰肌玉骨,自清凉无汗。
水殿风来暗香满。
绣帘开、一点明月窥人;
人未寝,枕钗横鬓乱。
起来携素手,庭户无声,时见疏星度河汉。
试问夜如何?夜已三更,金波淡。
玉绳低转,但屈指、西风几时来;
又不道、流年暗中偷换。
想求各位指点一下 怎么算字数啊 其中有可能还有英文 我数据库是GBK的 不过我没存文章内容 只存文件名了 我现在是要读取如上1.txt的字数 求函数或代码?!PS:1、中文和英文都有 2、以上文本内容是一节一行

解决方案 »

  1.   

    mb_strlen(file_get_contents("1.txt"));
      

  2.   

    iconv_strlen(file_get_contents("1.txt"))
      

  3.   

    一楼 二楼都不对 你们俩都缺参数 貌似是经验不足啊 呵呵 不过还是十分感谢! 继续关注中!!!!代码粗略大概是echo mb_strlen(file_get_contents("1.txt"),"gbk");或echo iconv_strlen(file_get_contents("1.txt"),","gbk");可统计的子都比word多了几十个字,在下认为还得过滤一下字符目前知道应该过滤的有空格、回车、制表,求各位一完整代码,xiele!!!
      

  4.   

    $charset = 'gbk';
    $filename = '1.txt';
    echo mb_strlen(str_replace(array("\r", "\n", "\t", ' '/*, ',', '.', '?', ':', '!', '\'', '"', ',', '。', '?', '!', ':', ' ' 标点符号自己看着写吧,最后一个是全角空格 */), '', file_get_contents($filename)), $charset)
      

  5.   

    这个问题在以前一个帖子里讨论过http://topic.csdn.net/u/20091103/21/e612248f-0045-4458-a29d-930ce191d74f.html
      

  6.   

    如果不加参数的话会用默认的参数来执行,楼主都已经说了是gbk,所以我认为这个参数可以不用加,加了效率反而慢了
      

  7.   


    默认编码不一定是gbk的,也有可能是utf-8,加一个编码参数几乎不会变慢
    你上次遇到的mb_xxx,加了个参数变慢的原因,我已经解释的很清楚了//写法一,在我这里耗费3.4秒
    <?php
    $str = "abc我";
    for ($i=0; $i<1000000; $i++)
        $a = mb_substr($str, 0, 2, "utf8");
    ?>
    //
    //
    //写法二,在我这里耗费1.4秒
    <?php
    $str = "abc我";
    for ($i=0; $i<1000000; $i++)
        $a = mb_substr($str, 0, 2, "UTF-8");
    ?>
    //
    //
    //写法三,在我这里耗费0.7秒
    <?php
    $str = "abc我";
    mb_internal_encoding("UTF-8");
    for ($i=0; $i<1000000; $i++)
        $a = mb_substr($str, 0, 2);
    ?>
    //
    //
    //
    //减去解释器载入和初始化以及代码编译的时间
    //各个方案的性能差别,就更大了解释:mb_string 系列函数,在执行的时候,如果指定了一个编码参数,PHP会
    从标准编码名字表中查找编码名字,如果找不到,会尝试从标准编码的MIME字符
    集名中查找,如果还是查找不到,会接着尝试标准编码名字的所有别名。这个过程
    中,并没有很高效的算法,字符串的匹配,用的是 strcasecmp,性能本身就不高。
    所以,应当避免不规范的编码名字。如果多次执行,应当先设置mb_string内部编
    码名字,而不是每次都指定编码。(参考php源码中的mbfl_name2encoding函数)
      

  8.   

    do_fork 能给我一个符合题目的正解吗
      

  9.   

    #9的不错呀,学习了。
    echo mb_strlen(preg_replace('/\s+/','',file_get_contents("1.txt")),"gbk");
      

  10.   

    这位仁兄的还是不精确啊 在下就是想叫叫真 只是想有一个严谨的态度 对待技术!! 因为我查了网上大家写的 大都草草了之 实际效用不能让人信服 1、
    以下是我从excel里复制的两行记录 复制到1.txt里 如下【大家不妨把自己写的用这个试一下,再对照word里显示的字数,希望哪位能给我一个回复,解释一下原因】:我的青春谁做主 24 18 凹进奥斯卡了解奥斯卡了大幅几啊说 图灵出版社 2006-09-03 2009-06-18 C-00000000001 B-00000000001 1 2 8 P-00000000001-1 P-00000000001-2
    奋斗 16 李四 23 第三方根深蒂固大法官 343-344 小强出版 2009-05-18 2009-06-18 C-00000000002 B-00000000002 7 3 6 B-00000000002-01 B-00000000002-02
    2、
    还有一个方法 不知对否 请高手指点  譬如上述两条记录复制在1.txt里,1.txt的大小为299字节 我的字符集是gbk的 一个汉字是两个字节(一个GBK汉字字符是2个字节,英文数字是1个字节) 我用299/2=149.5 最后结论是149.5个汉字 可word里显示的是69个字 在下就像知道究竟是为何 请各位点解!!!!可以有误差,但大家要知道小误差遇到大场面(或大数据)的时候,就是错误了.....
      

  11.   

    何必要和word的字数对应呢,它爱怎么算就怎么算,由它的实现的算法决定,你只需要知道gbk下一个汉字两个字节,你既然算出了299,这个就代表文本中有这么多个字符(GBK下),你的299/2是什么个意思呢?mb_strlen连英文的字符也会算进去的,你以为只计算中文的吗?如果内容不全是汉字,也没有什么通用的算法可以算出到底内容里包含多少个汉字,多少个英文字符,数字...必须遍历一遍文本内容,择取汉字,gbk下汉字编码区间(包括全角字符,特殊符号等等..),是0xa1 - 0xff,用正则就可取出相应gbk编码下的中文字符,具体可以参考gbk编码表$str = "我的青春谁做主 24 18 凹进奥斯卡了解奥斯卡了大幅几啊说 图灵出版社 2006-09-03 2009-06-18 C-00000000001 B-00000000001 1 2 8 P-00000000001-1 P-00000000001-2
    奋斗 16 李四 23 第三方根深蒂固大法官 343-344 小强出版 2009-05-18 2009-06-18 C-00000000002 B-00000000002 7 3 6 B-00000000002-01 B-00000000002-02";preg_match_all("/[".chr(0xa1)."-".chr(0xff)."]{2}/",$str,$m);//匹配gbk编码下的中文print_r($m[0]);echo count($m[0]);
      

  12.   

    自己动手,想怎么个计算,自己决定.一定要把代码写全给你?
    $str = "我的青春谁做主 24 18 凹进奥斯卡了解奥斯卡了大幅几啊说 图灵出版社 2006-09-03 2009-06-18 C-00000000001 B-00000000001 1 2 8 P-00000000001-1 P-00000000001-2
    奋斗 16 李四 23 第三方根深蒂固大法官 343-344 小强出版 2009-05-18 2009-06-18 C-00000000002 B-00000000002 7 3 6 B-00000000002-01 B-00000000002-02";preg_match_all("/[".chr(0xa1)."-".chr(0xff)."]{2}|[a-zA-Z0-9_-]+/",$str,$m);print_r($m[0]);echo count($m[0]);//这下69了吧?
      

  13.   

    你是指word,还是我的代码,其实没人认为这些东西是一个汉字,只是统计字数时一个算法约定而已,就是说,如果是中文就按字(2个字节)拆分进行计算,如果是其它的字符,就按空格,换行,制表符..拆分进行计算.你如果想把每个英文字符或者数字或者特殊字符也算做一个长度单位也可以,自己实现咯..