PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » PHP中高级 » 刚刚编写的切中文字符函数
本页主题: 刚刚编写的切中文字符函数 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

自由的龙

该用户目前不在线
级别: 中级程序员
精华: 1
发帖: 1264
威望: 1267 点
金钱: 12660 PYMB
贡献值: 0 点
在线时间:0(小时)
注册时间:2006-04-16
最后登录:2006-06-27

刚刚编写的切中文字符函数


切中文字符函数,两个英文字符算一个中文字符
帮我看看有没有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);
?>
顶端 Posted: 2006-04-20 17:55 | [楼 主]
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » PHP中高级

时:11-23 19:44 Copyright © 2006 phpwhy.com 权
ICP05060669

曳息 -