因为不是编码转换而是字形的转换,所以只能用对照表了。
对照表可由《简化字总表》产生
使用一个二十几k的对照表应该没有多大问题的,当iconv函数不可用而又要做编码转换时得用二百k以上的对照表呢

解决方案 »

  1.   

    哦,我想先把 GBK 码表用工具翻译成全部都为简体的再用字符的内码通过这个新表进行转换,大家觉得如何?
      

  2.   

    我只有繁体中文转换为简体中文类,没有GBK的
      

  3.   

    那怎么可能呢?
    gbk本身就包含简化字和繁体字,请不要把概念搞错!你应该从《简化字总表》来构造对照表,很简单的。
    碍礙
    肮骯
    袄襖
    坝壩
    板闆
    办辦
    ......
    这就是从《简化字总表》中提取出来的
      

  4.   

    那怎么可能呢?
    gbk本身就包含简化字和繁体字,请不要把概念搞错!你应该从《简化字总表》来构造对照表,很简单的。
    碍礙
    肮骯
    袄襖
    坝壩
    板闆
    办辦
    ......
    这就是从《简化字总表》中提取出来的
      

  5.   

    对照表我想也没有多大难度,只要我是想效率方面每个字符有唯一的 ASCII 序数值,因为我的GBK表是用chr()生成的,此时顺序是一定的。
    转换时用相反的方式,用org()到得ASCII序数值,再到我已经简化的GBK表中找。比如:“務” 到时我取相同的位置 ,但此时相同位置变成了 “务”,但如果系直接取“务”,此时在GBK表中的依然是“務”,因此不会受影响!因为此时取字符用的唯一ID是位置编码。
      

  6.   

    事实证明是可以的:
    $cnClass = new Chinese("GBK","GB2312","這是一個測試的字元串");
    $msg = $cnClass->ConvertStr();
    echo $msg."<br>";输出: 这是一个测试的字元串
      

  7.   

    不知道你的Chinese类是如何构造的,也不知道你的GBK表是如何构造的。
    但是从你的描述上来看,还是存在问题的。
    其实只需preg_replace_callback就可以完成转换了
    function foo($r) {
      $ar = array('碍'=>'礙','肮'=>'骯','袄'=>'襖','坝'=>'壩','板'=>'闆','办'=>'辦',....);
      if(isset($ar[$r[0]]))
        return $ar[$r[0]];
      return $r[0];
    }$text = preg_replace_callback("/[\x81-\xfe]./","foo",$text);函数foo中的$ar为“简化字-繁体字”对照,若需“繁体字-简化字”对照,只要做一下array_flip