@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.

PHP下中文编码各种格式间的转换类

Posted by zeal on 2005-05-16 18:19 , 1998 characters |  + 0 - 1   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/55 MaDe1nZEAL
标签 ( PHP ):  ,  ,  , 
目前该类库可以实现的编码转换有:简体中文 GB <-> 繁体中文 BIG5 编码互换,简/繁体中文 -> 拼音单向转换, 简/繁体中文 <-> UTF8 编码转换,简/繁体中文 -> Unicode单向转换。

类源代码原作者是Hessian(solarischan@21cn.com),我合并了一下原来的Sample脚本,同时修改了一下类文件,为类构造函数增加了一个参数以便用户可以方便的在使用的时候设置配置文件路径,这样就可以把这个类包放置在任何可以被访问到的目录下,否则原来的版本下引用class.Chinese.php的文件必须和class在相同的目录下面才行。

/**
 * 中文编码集合类库
 *
 * 目前该类库可以实现,简体中文 <-> 繁体中文编码互换,简体中文、繁体中文 -> 拼音单向转换,
 * 简体中文、繁体中文 <-> UTF8 编码转换,简体中文、繁体中文 -> Unicode单向转换
 *
 * @作者         Hessian(
solarischan@21cn.com)
 * @版本         1.7
 * @版权所有     Hessian / NETiS
 * @使用授权     GPL(不能应用于任何商业用途,无须经过作者同意即可修改代码,但修改后的代码必须按照GPL协议发布)
 * @特别鸣谢     unknow(繁简转换代码片断)
 * @起始         2003-04-01
 * @最后修改     2005-07-26
 * @访问         公开
 *
 * 更新记录
 *
 * ver 1.7 2005-07-26
 * 修改了while循环导致的bug。此bug当字符串最后一个字符为"0"的时候将处理错误。
 * 受影响方法: CHStoUTF8() , CHStoUNICODE()
 * (by Zeal Li ,http://www.zeali.net/)
 *
 * ver 1.6 2005-05-16
 * 构造函数增加了一个参数以便用户可以方便的在使用的时候设置配置文件路径
 * (by Zeal Li ,http://www.zeali.net/)
 *
 * ver 1.5 2003-06-06
 * 增加 UTF8 转换到 GB2312、BIG5的功能。
 *
 * ver 1.4 2003-04-07
 * 增加 当转换HTML时设定为true,即可改变charset的值。
 *
 * ver 1.3 2003-04-02
 * 增加 繁体中文转换至拼音的功能。
 *
 * ver 1.2 2003-04-02
 * 合并 简体、繁体中文转换至UTF8的函数。
 * 修改 简体中文转换至拼音的函数,返回值更改为字符串,每一个汉字的拼音用空格分开
 * 增加 简体中文转换为 UNICODE 的功能。
 * 增加 繁体中文转换为 UNICODE 的功能。
 *
 * ver 1.1 2003-04-02
 * 增加 OpenFile() 函数,支持打开本地文件和远程文件。
 * 增加 简体中文转换为 UTF8 的功能。
 * 增加 繁体中文转换为 UTF8 的功能。
 *
 * ver 1.0 2003-04-01
 * 一个集合了中文简体,中文繁体对应各种编码互换的类库已经初步完成。
 */

下载完整源代码包(filesize: 132,522 bytes) : 下载源代码 chinese.rar

Last Modified on 2007-05-24 17:15
23 条评论:
- aman () 于 2005-06-17 12:42
utf8
- aman () (link) 于 2005-06-21 14:49
人理我,算了!!!

自己另外
- zeal (link) 于 2005-06-21 15:08
没看到你的留言阿,不好意思?你发的时候是发的纯文本还是html邮件?
- aman () 于 2005-06-22 13:55
喔,
- zeal (link) 于 2005-06-22 16:15
用这个类单纯的进行utf8->big5的转换应该没有问题。问题应该还是在于phpnuke后续的操作上吧。我看你的站点上已经提供了自己的utf82big5的解决方法啦? :) 实际上只要有字符对应表,代码实现都是大同小异的。根据需要写一个轻量级一点的函数来满足自己的需要更方便。
- Peter2006-01-18 07:32
有没有繁体GBK到简体GBK的函数?
谢谢
- zeal (link) 于 2006-01-18 09:44
这里有一篇利用Windows API实现无码表进行GB <-> GBK <-> BIG5之间的转换(没有实际测试过,而且只适用于Windows环境): http://tech.163.com/05/1014/14/201GGAI80..
这里有人提供了GB <-> GBK <-> BIG5 的PHP版本,不过作者并没有直接把码表放出来提供下载,你可以按照文中的email地址去联系一下: http://www3.3800cc.com/Article/web/PHP/p..
- Peter2006-01-18 23:56
这个类相当不错啊,我昨天晚上看了一下,修改了一个问题:
一个网页由简体和繁体的中文以及英文,甚至德文混排的,当然是UTF-8编码,
我想把它换成拼音的,在现有的类的基础上,
如果 UTF-8 换 GB2312 就不能换繁体,因为码表没有,
如果 UTF-8 换 BIG5 就不能换简体,
我的修改是,首先 UTF-8 换 GB2312 ,如果码表找不到那就去繁体码表去找,然后把繁体换简体,最后生成拼音。成功了。。。

另外换拼音的函数,我也修改了一下,我没有用一个数组存拼音,因为如果一个英文单词转换输出时,字母之间会有空格。

还有一个建议就是,把悉构函数改一下,我觉得把待转换的字符串放在悉构函数是不恰当的。
因为如果我有很多个字符串要转的话,那就要不停的定义新对象。我个人喜欢的是把字符串放在一个方法里面。
这样,用$chinese->getStr ("UTF-8" , "PinYin" ,$str ) 就可以得到想要的字符串了。

如果有时间,我把这个类整理一下,不过首先要感谢前面那么多位作者的辛勤工作。。。
- agogo () 于 2006-06-19 15:08
[这里有人提供了GB <-> GBK <-> BIG5 的PHP版本,不过作者并没有直接把码表放出来提供下载,你可以按照文中的email地址去联系一下: http://www3.3800cc.com/Article/web/PHP/p..
]

請問,還有其他的連結麼?上面的已經連 不上
我需要「GB <-> GBK <-> BIG5 的PHP版本」
- Yanni () (link) 于 2006-12-16 22:57
我正在寻找简体繁体到拼音的php类,找到了这里

试用了一下,基本可以

但是有些问题。例如 无法将 璽 玺 等转正确,估计是不是 table库的问题呢?
- zeal (link) 于 2006-12-17 20:17
因为字符对应码表都是手工进行对应的,如果发现有的字符转码不正确或找不到的话,你需要自己去更新table表的对应关系。
- helen () 于 2007-05-04 23:20
How can I fine more proxy web. I need to use URL.
- water2008-09-05 17:12
这个码表不全或是有错,在utf8 > gb2312时有挺多错误.

如 ——转换成了 €€€€,还有一些中文字也会这样.
- zeal (link) verified2008-09-05 17:19
是的,一般来说这个码表会用作繁简体的转化(也不是完全正确)。像从utf-8转gb2312这样单纯字符集的转化最好还是直接用iconv或mb来做更高效。
- yt123 () 于 2008-12-15 09:41
请问有没有java版的utf8<->Big5的版本啊?thanks
- dada2008-12-18 15:35
为什么在繁体转utf8的时候转换为乱码的呢?
$chs = new Chinese("BIG5","gb2312","郵件編號",$codeTablesDir);
这样是乱码的
- zeal (link) verified2008-12-18 18:13
to dada:
繁体字和Big5是两个概念。在GBK,utf-8,unicode等很多种编码方式里面都有繁体字对应的编码,当然Big5也是一种对繁体字的编码方式。
想你写出来的"郵件編號"其实是其他编码方式的繁体字,而不是big5。你找个香港澳门用big5方式的网站使用gb2312来浏览他们的网页就知道big5编码的繁体字在gb方式下看是乱码的。
- dada2008-12-19 11:14
to zeal:
正常来说,utf-8是国际标准的编码,按道理来说如果我用gbk,big5,gb2312,iso-8859-1其中一种转为utf-8,正常来说是能够识别的啊。但是为什么却会产生乱码呢?
还有的就是:$chs = new Chinese("BIG5","utf-8","郵件編號",$codeTablesDir),无论我用哪种编码转为utf-8似乎也不行~..能否帮我解决这个问题呢?不知道涉及到简体的操作系统或者是繁体的操作问题不。
- zeal (link) verified2008-12-19 11:25
你的源字符串根本就不是big5,当然怎么转都是乱码。而且你转成utf-8之后的字符串要在utf-8的环境下去看才不是乱码。建议你先去学习一下多字节字符编码的基础知识,就不会拿这些东西来生搬硬套了。
- dada2008-12-19 12:11
我已经看过了那些基础的知识了。你能够提供一个繁体转utf-8写入文件的例子么。
- zeal (link) verified2008-12-19 12:19
echo "Big5->UTF8<br>";
$chs = new Chinese("BIG5","UTF8","锣传挡狦",$codeTablesDir);
echo $chs->ConvertIT();

在utf-8环境下,这种乱码的字符串才是big5格式的繁体字。
我提供的下载压缩包里面有个Sample.php基本上各种方式的转化都有了,你没有自己去看一眼么?
- dada2008-12-19 13:02
我已经自己解决掉了。谢谢你的帮助,你的所有simple和class我都已经看过的了。。
- Jerry () 于 2009-12-07 12:33
是否可以考虑增加 utf8 编码的 简繁互换功能?

如:
$ch = new Chinese();
$ch->setText(...);
$ch->setSource('UTF8/GB2312');
$ch->setTarget('UTF8/BIG5');
$result = $ch->convert();
日志存档
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
本 Blog 原创内容
遵循以下授权:

Creative Commons
(创作共用) CC

署名-非商业性
-相同方式分享
ZEAL Blog 基于
Powered byPivot - 1.24.1: 'Arcee'
Pivot1.24.1
开发
系统部署于
Linode.com
Launched @
2005-04-27
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号