页:
[1]
|
刚刚编写的切中文字符函数
切中文字符函数,两个英文字符算一个中文字符
帮我看看有没有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] |
| xuefengal | 2005-5-10 05:01 PM |
|
| 基本上够用了,把代码简化一下会更好点 |
| diekiss | 2005-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 |