php的汉字转换: GBK->Big5

原创 2002年09月10日 13:38:00

php的汉字转换一直是比较麻烦的事

首先要说两点:
1.GBK的繁体字并不是Big5,但一般繁体字都有对应的Big码
2.一GBK码并不一定有对应的Big5码,所以一般是不可逆转换

该类内置了三个函数
qswhStr 格式化字符串
qswhFile 格式化一文件
qswhDir 格式化目录下所有文件(.qswh的除外,那是原先文档的备份)

qswhBig5.php 从这里下载
http://www.blueidea.com/user/qswh/qswhBig5.zip

<?
class qswhBig5{
 var $qswhData;
 function qswhBig5($filename="qswhBig5.php"){
  $this->qswhData=file($filename);
 }
 function qswhStr($gb,$fail="??"){
  /******(qiushuiwuhen 2002-9-6)******/
  $ret="";
  for($i=0;$i<strlen($gb);$i++){
   if(($p=ord(substr($gb,$i,1)))>127){
    $q=ord(substr($gb,++$i,1));
    $tmp=$this->qswhData[$p-128];
    for($j=0;$j<strlen($tmp);$j+=6)if(($k=hexdec(substr($tmp,$j,2)))>=$q)break;
    if($k==$q)$q=chr(hexdec(substr($tmp,$j+2,2))).chr(hexdec(substr($tmp,$j+4,2)));
    else if($fail=="")$q=chr($p).chr($q); else $q=$fail;
   }
   else
    $q=chr($p);
   $ret.=$q;
  }
  return $ret;
 }
 function qswhFile($filename,$fail="??"){
  /******(qiushuiwuhen 2002-9-6)******/
  if(!file_exists($filename.".qswh"))copy($filename,$filename.".qswh");
  $fp=fopen($filename,"r+");
  $tmp=fread($fp,filesize($filename));
  rewind($fp);
  fwrite($fp,$this->qswhStr($tmp,$fail));
  fclose($fp);
 }
 
 function qswhDir($dirname,$fail="??"){
  /******(qiushuiwuhen 2002-9-6)******/
  $d = dir($dirname);
  while($entry=$d->read()) {
   if($entry=="."||$entry=="..")continue; 
   $entry=$dirname."/".$entry;
   if(is_dir($entry))
       $this->qswhDir($entry,$fail);
      else{
       if(substr($entry,-5)!=".qswh")$this->qswhFile($entry,$fail);
      }
  }
  $d->close();
  return $c;
 }
 
}

使用范例:
$words="秋水无恨";
$qswh=new qswhBig5("qswhBig5.php");//qswhBig5.php,可省参数

echo("<xmp>请选择编码Big5查看:".$qswh->qswhStr($words));
echo("/n编码一目录:".$qswh->qswhDir("test"));
echo("/n编码一文件:".$qswh->qswhFile("index.htm"));

使用说明:
qswhStr中第二个参数代表如果没有对应的Big5将替换的字,如果为空,则保留该字
将文件格式化后,记得要修改<meta中的content-type为Big。

ps.该文章现仅限在csdn文档中心,如要转载,请和作者联系,否则后果自负。

用C语言实现常见的三种中文内码转换

用C语言实现常见的三种中文内码转换    常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要...
  • xjbclz
  • xjbclz
  • 2016年06月29日 22:48
  • 1411

使用iconv进行GBK到BIG5编码转/简繁转换遇到的问题

Linux操作系统中的iconv命令/函数可以将一种已知的字符集文件转换成另一种已知的字符集文件。 在使用它进行GBK到BIG5的编码转换时,遇到"iconv:illeagal input seque...
  • littlefang
  • littlefang
  • 2015年02月27日 10:56
  • 3880

PHP类UTF8编码内的繁简转换-繁体-简体

均只支持 UTF8 文本,所以如果获得的来源是  $_GET 的话, 就有必要转换一下编码了。用到的函数是: Java代码   $str = $_GET['str'];   ...
  • Meseal
  • Meseal
  • 2016年06月23日 15:51
  • 7622

VC中三种常见中文内码的转换方法(GB2312/GBK/BIG5)

我们平时常见的三种中文内码是:GB2312(简体中文)、GBK、BIG5(繁体中文)。网上有很多中文内码的专用转换工具。我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换。但论坛里经常...
  • LewenSky
  • LewenSky
  • 2011年01月24日 11:15
  • 599

boost库学习随记五 Boost.Locale 之字符转换 gbk utf8 big5 string wstring等

 std::string boost::locale::conv::between ( char const *  begin,     char c...
  • leitianjun
  • leitianjun
  • 2014年04月28日 18:43
  • 13276

Boost.Locale 之字符转换 gbk utf8 big5 string wstring等

Boost.Locale是一个库,它提供高质量的本地化的设施在C + +的方式。它最初是设计的一部分CppCMS - C + +的Web框架的项目,然后促成了提升。 Boost.Locale提供强大...
  • gong_xucheng
  • gong_xucheng
  • 2014年05月16日 10:09
  • 4978

utf8 gbk big5 多编码批量转换软件

  • 2011年02月17日 17:24
  • 819KB
  • 下载

Perl中简体字转换为繁体字(GBK转换成big5)

今天用Perl解决了一个转码出现乱码的问题。需求是将gbk转换成big5.项目源码用的函数是decode()和encode()两个函数。源码如下: #!/usr/bin/perl use stri...
  • haoweilaizoule
  • haoweilaizoule
  • 2016年07月15日 17:22
  • 739

GBK,GB2312,BIG5内码转换

  • 2016年01月08日 10:48
  • 38KB
  • 下载

BIG5编码, GB编码(GB2312, GBK, ...), Unicode编码, UTF8, WideChar, MultiByte, Char 说明与区别

一. BIG5编码, GB编码(GB2312, GBK, ...), Unicode编码 1.1. BIG5编码 BIG5字集是台湾繁体字集,共包括国标繁体汉字13053个 1.2. GB编码 GB2...
  • cay22
  • cay22
  • 2014年12月31日 13:55
  • 3338
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php的汉字转换: GBK->Big5
举报原因:
原因补充:

(最多只允许输入30个字)