<?php /** * 本程序用于从编码对照表装入简繁编码,利用序列化来缩短装入时间 * 同时提供两个繁简转换函数 * 使用方法: * 在需要的程序中加入 * require_once "load_gb_big5.php"; * setchar(["big5"]); */
$filename = "gb_big5.txt"; if(!file_exists($filename)) { /** * 连接并打开对照表 */ $conn = mysql_connect(); mysql_select_db("unicode"); /** * 提取其中big5和gbk编码,表中big5只有13487个(包括符号) */ $sql = "select gbk,big5,gb2312 from unicode where big5 != ''"; $rs = mysql_query($sql); /** * 读取数据到数组,注意key和value的处理 */ $code = array(0=>"big5",gb2312=>0);
while($row = mysql_fetch_array($rs)) { $code[pack("H4",$row][gbk])] = pack("H4",$row[big5]); } mysql_close($conn); $fp = fopen($filename,"w"); fwrite($fp,serialize($code)); fclose($fp); }else { $fp = fopen($filename,"r"); $code = unserialize(fread($fp,filesize($filename))); fclose($fp); }
/** * 将输入串转换成相应编码 */ function getchar($s) { global $code; $v = ""; for($i=0;$i<strlen($s);$i++) { if(ord($s[$i]) > 0x7f) { $p = sprintf("%02X%02X",$s[$i],$s[$i+1]); $p = $s[$i].$s[$i+1]; $ch = $code[$p]; if($ch == "") $ch = $s[$i].$s[$i+1]; $v .= $ch; $i++; }else $v .= $s[$i]; } return $v; }
/** * 设定转换类型并输出头 * 此函数前不能有其他输出 */ function setchar($char="gb2312") { global $code; if($char != "gb2312" && $char != "big5") die("字符编码类型错!!!"); if($code[0] != $char) $code = array_flip($code);// 若不是指定的编码类型,则交换键 header("Content-type: text/html; charset=$char"); }
?> 测试例: <?php require_once "load_gb_big5.php"; setchar("big5");
echo getchar(' 最近完成了gbk、gb2312、big5的编码对照表(含其汉语拼音)的整理 现以文本文件方式提供给大家,压缩包297k 其中:(均包括符号) gbk21791 big5 15863 gb2312 7478 注意数据行的",",在mysql下必须要有,否则可能出错。有的朋友拿到的新版可能没有,请自行加上。 (2002-10-24) 有兴趣的朋友请与我联系,email:czjsz_ah@stats.gov.cn
文档格式: "B6F6","","B6F6","997F","饿","e", "B6F7","AEA6","B6F7","6069","恩","en", "B6F8","A6D3","B6F8","800C","而","er|neng", "B6F9","A449","B6F9","513F","儿","er|ren", 顺次为:gbk、big5、gb2312、unicode、字模、拼音
mysql建表代码(请按实际情况修改): '); ?>
|