喜悦国际村 » 代码共享 » 刚刚编写的切中文字符函数

页: [1]
kayej2005-5-10 03:44 PM
刚刚编写的切中文字符函数

切中文字符函数,两个英文字符算一个中文字符
帮我看看有没有bug,或者还有更好的算法
[PHP]
<?php
function gb_substr($str,$start=0,$len=-1) //$start没有用,英文字母2个算一个,如果为单数者加1看成2个
{
        $enCount = 0;
        $strLen = strlen($str);
        $len *= 2;
        if($len<0) $len = $strLen;
        $strLen = ($len>$strLen)?$strLen:$len;       
        for($i=0;$i<$strLen;$i++)
                if(ord(substr($str,$i,1))<0xa1) $enCount++;
        $len = ($len % 2 != 0)?++$len:$len; //$len 必须为偶数
        if($enCount % 2 == 0)
                $re_str = substr($str,$start,$len);
        else
                $re_str = substr($str,$start,$len-1);
        return $re_str;
}

function gb_strlen(&$str) //英文字母2个算一个,如果为单数者加1看成2个
{
        $len=strlen($str);
        $l=0;$chCount=0;$enCount=0;
        for($i=0;$i<$len;$i++)
        {
                if(ord(substr($str,$i,1))>=0xa1) {$i++;$chCount++;}
                else {$enCount++;}
                $l++;
        }
        $enCount = ($enCount % 2 == 0)?$enCount/2:++$enCount/2;
        $count = $chCount + $enCount;
        return $count;
}

$dd = "232我我我";
echo gb_substr($dd,0,3)."\n";
echo gb_strlen($dd);
?>
[/PHP]

xuefengal2005-5-10 05:01 PM
基本上够用了,把代码简化一下会更好点

diekiss2005-5-10 05:10 PM
很好,但我只需要把东西显示出来的话,直接截取一个长度,然后 . chr(27)就可以避免乱码了 :)


查看完整版本: 刚刚编写的切中文字符函数


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.00609 second(s), 2 queries