<?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建表代碼(請按實際情況修改): '); ?>
|