繁簡互換程式說明


大家好,我是 oikos 網站 站長小梅子,這邊這個東東是一個很簡易的繁簡換轉的 PHP 套件,它的原始出處來自於神奇傑利網,簡單的說,它使用了兩個 gb 和 big5 的字碼表,然後針對每一個網頁做轉換處理,因為用到了 cookie 的設定,所以只要你選擇了第一個轉換的語系(例如簡體)那麼接下來你看到的網頁,只要有做過處理的,都是簡體了。

網路上有一些相關的程式,其中有幾個是商業軟體在運作,免費的也有一些,不過小梅子自己覺得傑利這個範例算是比較容易使用,並且可以支援討論區的顯示,也比較沒有限制的做法(有些解決方式需要對主機的設定做處理),所以也可以適用於一般的免費空間網站,只要有支援 PHP 語法的主機都可以使用。

當然它也有缺點啦,例如效能稍差,需要對每個網頁做處理等,不過這些缺點不影響這是一個好的繁簡互換範例的事實,所以小梅子很願意為大家介紹這個免費的方法,也謝謝傑利寫的這個東西,假如有人可以改善的更好,那就更是大家之福了。

由於這個範例是我從傑利的討論區中,看了一堆的討論之後拼湊出的,但是我自己用過沒有問題。

這個檔案夾中有下列東東(請從這邊下載):

big5.map - 繁體字碼表

ccharset.php - 轉換主程式

gb.map - 簡體字碼表

readme.php - 中文說明檔及範例

■ 基本用法

1. 打開 ccharset.php 檔案,修改其中兩個地方

var $gb_map="/var/www/gb.map";
var $big5_map="/var/www/big5.map";

上面這兩個地放是指定繁體、簡體字碼表的位置,請寫上完整的實體檔案路徑位置,而不要使用相對位置,例如 /home/test/big.map

2. 將這四個檔案都上傳到網站目錄下即可,然後看看 readme.php 這個檔案,你會看到【繁體、簡體】的選項,點下去試看看,就應該會看到互換了。

■ 簡單分析

它的轉換原理是這樣,在這個 readme.php 檔案中(請使用可以看到程式碼的編輯軟體),在最上方,也就是在

<html>
<head>

的上方,可以看到下面的程式碼,這邊的意思是,當整個網頁被載入前,會先被函數處理,它會去判斷你要顯示的是簡體還是繁體,然後才會繼續處理剩下的字串顯示。

<?php
ob_start();
if (isset($c_lang)) {
setcookie('clang',$c_lang,time()+3600);
} else {
$c_lang=$HTTP_COOKIE_VARS['clang'];
}
include('ccharset.php');
?>

小心,這邊的 include('ccharset.php') 最好也用實體檔案路徑
而在網頁的最下方,會看到下面的程式碼

<?php
global $c_lang;
$RealOutput = ob_get_contents();
ob_end_clean();
if ($c_lang=='GB') {
$code=new CCharset;
$RealOutput=$code->Big5_Gb($RealOutput);
}
echo $RealOutput;
?>

當然啦,這邊就是收尾的工作。

所以透過這上下兩段程式碼,就可以將這個網頁繁簡互換了。

而繁簡互換的催化劑(那個繁體、簡體的按鈕),則是下面這段 javascript 搞出來的

<script type='text/javascript'>
var where,i;
where=window.location.href;
i=where.lastIndexOf('c_lang');
if (i>0) where=where.substring(0,i-1);
if (where.lastIndexOf('?')>0){
document.write('<a href='+where+'&c_lang=GB'+'>簡體</a> ');
document.write('<a href='+where+'&c_lang=big5'+'>繁體</a>');
} else {
document.write('<a href='+where+'?c_lang=GB'+'>簡體</a> ');
document.write('<a href='+where+'?c_lang=big5'+'>繁體</a>');
}
</script>

你可以將它貼到任何你想放的網頁位置。

這上下兩段程式碼都不需要改變,但是需要貼在每個網頁中,這樣有處理過的網頁才會有繁簡互換的效果。

■ 實際套用

我自己在用的時候,遇到的最大問題就是,天啊,每個網頁都得這樣處理嗎?

我們在回頭看一下上面的原理,你就會知道它的處理方式要在網頁讀取前做轉換,讀取後做收尾,所以一個套用的招數,就是直接將這兩段東西包含在網站上。

由於 oikos 網站用的是 xoops 模組,所以我就會將頭前那段,拷貝在 header.php 這個檔案中,而將尾巴那段拷貝到 footer.php 這邊,這樣,只要是 xoops 控制的網頁包括所有的新聞區、討論區等),都可以享受到繁簡互轉的優點啦,這樣棒吧。

假如你用的是其他類似的 nuke 系列,或是有使用到模組拆掉 html 顯示的方法,都可以用類似的處理方式,就可以讓你網站很快的有一個繁簡互換器喔。

假如你的網站並不是用這樣的方式,那麼還有一個賴皮招,就是直接使用 Apache 內建的設定,指定每一個網頁輸出前和輸出後自動添加的內容,這樣應該也可以做到繁簡互換喔,關於這個部分的實作,各位可以自行參考 Apache 的相關書籍資料。