注册 | 登录 | 搜索 
 ›› ›› 『 PHP技术讨论 』›› [原创]PHP全角转半角算法和函数
共有 786 人关注过本帖  
<< 上一主题    下一主题 >>
树形 打印

[原创]PHP全角转半角算法和函数

帅哥哟,离线,有人找我吗?

头衔:动网PHP技术

等级:动网团队

文章:564

积分:3032

注册:2007-08-17 14:12:34

楼主  2008-07-04 12:09:05  

在UTF-8编码中,全角字符除了空格u12288=半角字符a32外,其余的全角编码(65281-65374)和半角编码(33-126)都相差65248,因此可以直接用函数算出:

处理前需要先将输入字符串转换为UTF-8编码:

function &StrToDBC($str,$Encode='GBK'){
 if($Encode!='UTF8')$str=mb_convert_encoding($str,'UTF-8',$Encode);
 $ret='';
 for($i=0;$s1=$str[$i],$i<strlen($str);$i++){
  if(($c=ord($s1))&0x80){
   $s2=$str[++$i];
   $s3=$str[++$i];
   $c=(($c&0xF)<<12)|((ord($s2)&0x3F)<<6)|(ord($s3)&0x3F);
   if($c==12288){
    $ret.=' ';
   }elseif($c>65280&&$c<65375){
    $c-=65248;
    $ret.=chr($c);
   }else{
    $ret.=$s1.$s2.$s3;
   }
  }else{
   $ret.=$str[$i];
  }
 }
 return ($Encode=='UTF8'?$ret:mb_convert_encoding($ret,$Encode,'UTF-8'));
}

 

example:

$s="全角转半角****,中文 (转换(换";

echo StrToDBC($s);

动网论坛商业版热卖中

等待PHP的再一次突破
动网论坛商业版热卖中
引用 | 回复 | TOP

帅哥哟,离线,有人找我吗?

头衔:、①玍㈠迣

等级:超级版主

威望:1

文章:19780

积分:37448

注册:2007-05-16 21:22:50

沙发  2008-07-04 15:49:28  

动网插件,模板风格下载
动网论坛商业版热卖中
引用 | 回复 | TOP

美女呀,离线,留言给我吧!

头衔: 永远的天使

等级:管理员

威望:1

文章:12607

积分:36005

注册:2003-09-11 17:38:00

板凳  2008-12-01 16:12:36  

  现在不常上QQ,为了您的问题能得到尽快解决,请在技术区发帖提问。

  敬请注意,谢谢理解!

动网论坛商业版热卖中
引用 | 回复 | TOP

2 / 回复数 1/1 1 GO