【www.gdgbn.com--php常用代码】

$uc2gbtable = $codetable = $big5_data = $gb_data = "";
$gbkunidic = null;

//utf-8 转gb编码
function utf82gb($utfstr)
{
 if(function_exists("iconv"))
 {
  return iconv("utf-8","gbk//ignore",$utfstr);
 }
 global $uc2gbtable;
 $okstr = "";
 if(trim($utfstr)=="")
 {
  return $utfstr;
 }
 if(empty($uc2gbtable))
 {
  $filename = dedeinc."/data/gb2312-utf8.dat";
  $fp = fopen($filename,"r");
  while($l = fgets($fp,15))
  {
   $uc2gbtable[hexdec(substr($l, 7, 6))] = hexdec(substr($l, 0, 6));
  }
  fclose($fp);
 }
 $okstr = "";
 $ulen = strlen($utfstr);
 for($i=0;$i<$ulen;$i++)
 {
  $c = $utfstr[$i];
  $cb = decbin(ord($utfstr[$i]));
  if(strlen($cb)==8)
  {
   $csize = strpos(decbin(ord($cb)),"0");
   for($j=0;$j < $csize;$j++)
   {
    $i++; $c .= $utfstr[$i];
   }
   $c = utf82u($c);
   if(isset($uc2gbtable[$c]))
   {
    $c = dechex($uc2gbtable[$c]+0x8080);
    $okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
   }
   else
   {
    $okstr .= "&#".$c.";";
   }
  }
  else
  {
   $okstr .= $c;
  }
 }
 $okstr = trim($okstr);
 return $okstr;
}

 

 

 

//gb转utf-8编码
function gb2utf8($gbstr)
{
 if(function_exists("iconv"))
 {
  return iconv("gbk","utf-8//ignore",$gbstr);
 }
 global $codetable;
 if(trim($gbstr)=="")
 {
  return $gbstr;
 }
 if(empty($codetable))
 {
  $filename = dedeinc."/data/gb2312-utf8.dat";
  $fp = fopen($filename,"r");
  while ($l = fgets($fp,15))
  {
   $codetable[hexdec(substr($l, 0, 6))] = substr($l, 7, 6);
  }
  fclose($fp);
 }
 $ret = "";
 $utf8 = "";
 while ($gbstr != "")
 {
  if (ord(substr($gbstr, 0, 1)) > 0x80)
  {
   $thisw = substr($gbstr, 0, 2);
   $gbstr = substr($gbstr, 2, strlen($gbstr));
   $utf8 = "";
   @$utf8 = u2utf8(hexdec($codetable[hexdec(bin2hex($thisw)) - 0x8080]));
   if($utf8!="")
   {
    for ($i = 0;$i < strlen($utf8);$i += 3)
    $ret .= chr(substr($utf8, $i, 3));
   }
  }
  else
  {
   $ret .= substr($gbstr, 0, 1);
   $gbstr = substr($gbstr, 1, strlen($gbstr));
  }
 }
 return $ret;
}

 

 

 

//unicode转utf8
function u2utf8($c)
{
 for ($i = 0;$i < count($c);$i++)
 {
  $str = "";
 }
 if ($c < 0x80)
 {
  $str .= $c;
 }
 else if ($c < 0x800)
 {
  $str .= (0xc0 | $c >> 6);
  $str .= (0x80 | $c & 0x3f);
 }
 else if ($c < 0x10000)
 {
  $str .= (0xe0 | $c >> 12);
  $str .= (0x80 | $c >> 6 & 0x3f);
  $str .= (0x80 | $c & 0x3f);
 }
 else if ($c < 0x200000)
 {
  $str .= (0xf0 | $c >> 18);
  $str .= (0x80 | $c >> 12 & 0x3f);
  $str .= (0x80 | $c >> 6 & 0x3f);
  $str .= (0x80 | $c & 0x3f);
 }
 return $str;
}

//utf8转unicode
function utf82u($c)
{
 switch(strlen($c))
 {
  case 1:
   return ord($c);
  case 2:
   $n = (ord($c[0]) & 0x3f) << 6;
   $n += ord($c[1]) & 0x3f;
   return $n;
  case 3:
   $n = (ord($c[0]) & 0x1f) << 12;
   $n += (ord($c[1]) & 0x3f) << 6;
   $n += ord($c[2]) & 0x3f;
   return $n;
  case 4:
   $n = (ord($c[0]) & 0x0f) << 18;
   $n += (ord($c[1]) & 0x3f) << 12;
   $n += (ord($c[2]) & 0x3f) << 6;
   $n += ord($c[3]) & 0x3f;
   return $n;
 }
}

 

 

 

//big5码转换成gb码
function big52gb($text)
{
 if(function_exists("iconv"))
 {
  return iconv("big5","gbk//ignore",$text);
 }
 global $big5_data;
 if(empty($big5_data))
 {
  $filename = dedeinc."/data/big5-gb.dat";
  $fp = fopen($filename, "rb");
  $big5_data = fread($fp,filesize($filename));
  fclose($fp);
 }
 $max = strlen($text)-1;
 for($i=0;$i<$max;$i++)
 {
  $h = ord($text[$i]);
  if($h>=0x80)
  {
   $l = ord($text[$i+1]);
   if($h==161 && $l==64)
   {
    $gbstr = " ";
   }
   else
   {
    $p = ($h-160)*510+($l-1)*2;
    $gbstr = $big5_data[$p].$big5_data[$p+1];
   }
   $text[$i] = $gbstr[0];
   $text[$i+1] = $gbstr[1];
   $i++;
  }
 }
 return $text;
}

 

 

 

//gb码转换成big5码
function gb2big5($text)
{
 if(function_exists("iconv"))
 {
  return iconv("gbk","big5//ignore",$text);
 }
 global $gb_data;
 if(empty($gb_data))
 {
  $filename = dedeinc."/data/gb-big5.dat";
  $fp = fopen($filename, "rb");
  $gb = fread($fp,filesize($filename));
  fclose($fp);
 }
 $max = strlen($text)-1;
 for($i=0;$i<$max;$i++)
 {
  $h = ord($text[$i]);
  if($h>=0x80)
  {
   $l = ord($text[$i+1]);
   if($h==161 && $l==64)
   {
    $big = " ";
   }
   else
   {
    $p = ($h-160)*510+($l-1)*2;
    $big = $gb_data[$p].$gb_data[$p+1];
   }
   $text[$i] = $big[0];
   $text[$i+1] = $big[1];
   $i++;
  }
 }
 return $text;
}

 

 

 

//unicode url编码转gbk编码函数
function unicodeurl2gbk($str)
{
 //载入对照词典
 if(!isset($globals["gbkunidic"]))
 {
  $fp = fopen(dedeinc."/data/gbk-unicode.dat","rb");
  while(!feof($fp))
  {
   $globals["gbkunidic"][bin2hex(fread($fp,2))] = fread($fp,2);
  }
  fclose($fp);
 }

 //处理字符串
 $str = str_replace("$#$","+",$str);
 $glen = strlen($str);
 $okstr = "";
 for($i=0; $i < $glen; $i++)
 {
  if($glen-$i > 4)
  {
   if($str[$i]=="%" && $str[$i+1]=="u")
   {
    $uni = strtolower(substr($str,$i+2,4));
    $i = $i+5;
    if(isset($globals["gbkunidic"][$uni]))
    {
     $okstr .= $globals["gbkunidic"][$uni];
    }
    else
    {
     $okstr .= "&#".hexdec("0x".$uni).";";
    }
   }
   else
   {
    $okstr .= $str[$i];
   }
  }
  else
  {
   $okstr .= $str[$i];
  }
 }
 return $okstr;
}

本文来源:http://www.gdgbn.com/jiaocheng/28208/