PHP 繁简转换
  • 收藏任务 (0)
  • 订阅任务

当前任务已有:929人关注 3人报名 4个稿件 0篇交流

 

PHP 繁简转换

我们需要一个繁简转换功能, 要用 php 写,我们提供下面的代码,下面代码不完全工作,主要原因是因为缺少2个字库,详细信息,请参考:

http://gb.php5.idv.tw/modules.php?mod=forum&act=show&cid=13&showid=4746

必须要用如下代码:

<?php
if(false){
?>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<meta http-equiv="Content-Language" content="zh-tw">
<?php
}

class PIconv{

var $fpB2G = NULL;
var $fpG2B = NULL;

function PIconv(){
}

function Free(){
if(isset($this->fpB2G)){
fclose($this->fpB2G);
$this->fpB2G = NULL;
}
if(isset($this->fpG2B)){
fclose($this->fpG2B);
$this->fpG2B = NULL;
}
unset($this);
}

function FillBnG(&$AstrBig5,&$AstrGB2312,$AdbBig5 = NULL,$AdbGB2312 = NULL){
if((string)$AstrBig5 != ''
&& (string)$AstrGB2312 == ''){
$AstrGB2312 = $this->Big5ToGB2312($AstrBig5);
}else if((string)$AstrGB2312 != ''
&& (string)$AstrBig5 == ''){
$AstrBig5 = $this->GB2312ToBig5($AstrGB2312);
}else if((string)$AstrBig5 != ''
&& (string)$AstrGB2312 != ''){
if("$AdbBig5" != '' && (string)$AstrBig5 != "$AdbBig5" && "$AdbGB2312" != '' && (string)$AstrGB2312 != "$AdbGB2312"){
}else if("$AdbBig5" != '' && (string)$AstrBig5 != "$AdbBig5"){
$AstrGB2312 = $this->Big5ToGB2312($AstrBig5);
}else if("$AdbGB2312" != '' && (string)$AstrGB2312 != "$AdbGB2312"){
$AstrBig5 = $this->GB2312ToBig5($AstrGB2312);
}
}
}

function Big5ToGB2312($Astr){
Global $Application;
if($Application->IsUTF8()){
$big5str = $this->IConv('UTF-8','Big5',$Astr);
if($big5str === false) return '';
$gbstr = $this->B2G($big5str);
$Areturnstr = $this->IConv('GB2312','UTF-8',$gbstr);
if($Areturnstr === false) return '';
}else{
$Areturnstr = $this->B2G($Astr);
}
return $Areturnstr;
}

function GB2312ToBig5($Astr){
Global $Application;
if($Application->IsUTF8()){
$gbstr = $this->IConv('UTF-8','GB2312',$Astr);
if($gbstr === false) return '';
$big5str = $this->G2B($gbstr);
$Areturnstr = $this->IConv('Big5','UTF-8',$big5str);
if($Areturnstr === false) return '';
}else{
$Areturnstr = $this->G2B($Astr);
}
return $Areturnstr;
}

function IConv($aacp1,$Aacp2,$Astr1){
if("$aacp1" != 'UTF-8'){
$Astr2 = @iconv($aacp1,$Aacp2,$Astr1);
return $Astr2;
}
$str2 = '';
$j = strlen($Astr1);
for($i = 0;$i < $j;$i++){
$ascstr = substr($Astr1,$i,1);
$ordasc = ord($ascstr);
if(($ordasc >= 240) && ($ordasc <= 255)){
$l = 4;
}else if(($ordasc >= 224) && ($ordasc <= 239)){
$l = 3;
}else if(($ordasc >= 192) && ($ordasc <= 223)){
$l = 2;
}else{
$l = 1;
}
$asc1 = substr($Astr1,$i,$l);
$asc2 = @iconv($aacp1,$Aacp2,$asc1);
if("$asc2" == ''){
$asc2 = '';
for($k = 0;$k < $l;$k++){
$asc2 .= '?';
}
}
$str2 .= $asc2;
$i += ($l - 1);
}
return $str2;
}

function B2G($Astr){
Global $Application;
if(!$this->fpB2G) $this->fpB2G = fopen($Application->PhpObjectDir.'iconv/big5togb.dat','r');
$max = strlen($Astr);
for($i = 0;$i < $max;$i++){
$h = ord($Astr[$i]);
if((($i + 1) < $max) && ($h >= 160)){
$l = ord($Astr[$i + 1]);
if ($h == 161 && $l == 64) {
$gb = ' ';
} else {
fseek($this->fpB2G,($h - 160) * 510 + ($l - 1) * 2);
$gb = fread($this->fpB2G,2);
}
$Astr[$i] = $gb[0];
$Astr[$i + 1] = $gb[1];
$i++;
}
}
return $Astr;
}

function G2B($Astr){
Global $Application;
if(!$this->fpG2B) $this->fpG2B = fopen($Application->PhpObjectDir.'iconv/gb2big5.dat','r');
$max = strlen($Astr);
for ($i = 0;$i < $max;$i++) {
$h = ord($Astr[$i]);
if((($i + 1)) < $max && ($h >= 160)) {
$l = ord($Astr[$i + 1]);
if ($h == 161 && $l == 64) {
$gb = ' ';
} else {
fseek($this->fpG2B,($h - 160) * 510 + ($l - 1) * 2);
$gb = fread($this->fpG2B,2);
}
$Astr[$i] = $gb[0];
$Astr[$i + 1] = $gb[1];
$i++;
}
}
return $Astr;
}
}

交稿要求:

 请将做好的程序做一个展示,留下您的联系方式,我们需要测试,如满意后将会联系您

 

 






推荐任务获得提成:查看推荐任务提成详细规则..
为了您下次访问方便,建议您把本任务收藏到:

任务交流 发表评论
任务交流 (200字)[关闭]

  • 还没有人评论,你来两句吧