如何用php准确统计中英文字数呢?我还没有找到很好的办法,求教

解决方案 »

  1.   

    function ccStrLen($str) #计算中英文混合字符串的长度 

    $ccLen=0; 
    $ascLen=strlen($str); 
    $ind=0; 
    $hasCC=ereg("[xA1-xFE]",$str); #判断是否有汉字 
    $hasAsc=ereg("[x01-xA0]",$str); #判断是否有ASCII字符 
    if($hasCC && !$hasAsc) #只有汉字的情况 
    return strlen($str)/2; 
    if(!$hasCC && $hasAsc) #只有Ascii字符的情况 
    return strlen($str); 
    for($ind=0;$ind<$ascLen;$ind++) 

    if(ord(substr($str,$ind,1))>0xa0) 

    $ccLen++; 
    $ind++; 

    else 

    $ccLen++; 


    return $ccLen; 

    function ccStrLeft($str,$len) #从左边截取中英文混合字符串 

    $ascLen=strlen($str); if($ascLen<=$len) return $str; 
    $hasCC=ereg("[xA1-xFE]",$str); #同上 
    $hasAsc=ereg("[x01-xA0]",$str); 
    if(!$hasCC) return substr($str,0,$len); 
    if(!$hasAsc) 
    if($len & 0x01) #如果长度是奇数 
    return substr($str,0,$len+$len-2); 
    else 
    return substr($str,0,$len+$len); 
    $cind=0;$flag=0; 
    while($cind<$ascLen) 

    if(ord(substr($str,$cind,1))<0xA1) $flag++; 
    $cind++; 

    if($flag & 0x01) 
    return substr($str,0,$len); 
    else 
    return substr($str,0,$len-1); 
    }
      

  2.   


    /**
     * UTF-8编码情况下 *
     * 计算字符串的长度 *
     * @param   string      $str        字符串
     *
     * @return  array
     */
    function strLength($str)
    {
        $length = strlen(preg_replace('/[\x00-\x7F]/', '', $str));    $arr['en'] = strlen($str) - $length;
        $arr['cn'] = intval($length / 3);//编码GBK,除以2
        
        return $arr;
    }
      

  3.   

    $s = '如何用php准确统计中英文字数呢';
    echo iconv_strlen($s, 'gbk'); //out:16$s = iconv('gbk', 'utf-8', $s);
    echo iconv_strlen($s, 'utf-8'); //out:16mb_srting 函数库也有相应的函数
      

  4.   


    我用的是utf-8的,所以不准,你这个utf-8的怎么弄?
      

  5.   

    utf-8,怎么就“所以不准”?,你贴出结果不准的测试字符串,看看么
      

  6.   

    我前面注释清楚了给出的是/3,//编码GBK,除以2,你测试的字符串结果不准,麻烦贴出来我看看,
      

  7.   

    你的php文件是utf-8,编辑器是utf-8,其它的自然是utf8了。
      

  8.   


    之前没看仔细,你这返回的是数组哦,直接返回$arr['en']+$arr['cn']不就好了么