刚刚编写的切中文字符函数
切中文字符函数,两个英文字符算一个中文字符 帮我看看有没有bug,或者还有更好的算法
CODE:[Copy to clipboard]<?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); ?>
|