![]() |
| | #1 |
| 論壇站長 註冊日期: 2004-10-06 住址: http://www.twvbb.com
文章: 1,588
| 以下轉自 http://osc.kmd.com.tw/article5.html 仔細探究原因,你會發現,錯的人其實不該是許蓋功,而是通稱大五碼的BIG5碼,關於大五碼的歷史傳說眾說紛紜,無一定論。我們並不評論當初編碼的對錯與是非,對這歷史有興趣的讀者不妨到google搜尋"BIG5",相信可以找到一堆資料,或是到圖書館翻翻下列兩本書: 書名:中文字碼:萬碼奔騰,一碼當先 作者:黃大一 出版單位:永麒科技 書名:國字整理小組十年 作者:謝清俊、黃克東 出版單位:資訊應用國字整理小組 既然大五碼聽來似乎有些問題,為何目前幾乎所有的繁體中文卻又都採用此一編碼呢?在西元1983-1984年間,個人電腦正在台灣逐漸推廣,電腦上的套裝軟體也開始盛行,為了解決電腦處理中文的問題,因而制定一套中文內碼,也就是我們通稱的"BIG5碼",又稱大五碼。而經歷過這段時間的人,一定不會忘記當初倚天中文的行銷手法,在國外軟體廠商開始引進原版軟體觀念的當時,倚天中文卻反其道而行,允許校園甚至一般使用者無條件且免費複製其中文系統,因此,讓倚天中文在當時幾乎成為中文的標準,也由於倚天中文正是採用BIG5編碼,嚴格說來,也就是BIG5碼為何一直沿用到現今的主要原因了。 大五碼錯在哪裡? 錯在編碼時沒有把美國標準資訊交換碼ASCII(American Standard Code for Information Interchange)的控制碼排除在外,凡是唸過計算機概論的人都知道ASCII是以byte為單位,又1 byte=8 bits,所以ASCII最多可以編2^8=256個字元,對於只有26個字母的英文語系國家來說已綽綽有餘,但對於有幾萬字的中文絕對不夠,因此必須用兩個byte來代表一個中文字,如"中"字的編碼即是"A4A4"。然而,BIG5碼設計時為了避免與ASCII衝突,每個中文字的第一個byte僅使用ASCII裡的高字元(129-255),但在第二個byte卻用到了部分低字元(1-128),這正是BIG5碼在日後應用上造成極大不便的最大幫兇了。 為何BIG5碼專找php+mysql麻煩? 原因有三: 一、sql隱碼問題: 我們知道,如果要在mysql資料庫中擷取得資料時的語法為: PHP 代碼: PHP 代碼: PHP 代碼: 因此,單引號變成了頭號隱形殺手。 二:php 的跳脫字元 5C在php裡面是被拿來當跳脫字元,也就是說當變數裡面的文字帶有 、單引號或雙引號時,為了要可以正確顯示這些特殊字元,通常需要多加一個 @,常見的例子如: PHP 代碼: 如果沒加,立刻會出現錯誤訊息: HTML 代碼: Parse error: parse error, unexpected T_LNUMBER, expecting ',' or ';' in c:appservwwwcode.php on line 2 代碼: INSERT INTO mytable VALUES ('許蓋功');
三、addslashes與stripslashes函數: 為了解決單引號可能被用來當成攻擊資料庫的工具,一般在寫php程式時會利用addslashes函數將變數裡的單引號前加入一個跳脫字元,如上述原本在passwd輸入: ' or 1=1 or 1=' 可以騙過驗證,在經過addslashes函數處理後變成: @' or 1=1 or 1=@' 這樣便可以避免單引號被用來當成攻擊資料庫的工具了。但是,如此一來,跳脫字元會被當成輸入文字直接寫入資料庫內,因此,當我們寫入資料庫時若用了addslashes函數,從資料庫取出該筆資料時就必須使用stripslashes將刪去,否則顯示出來的資料就會多一個的跳脫字元了。 BIG5不只找php麻煩,連unix都倖免於難 7C 是 ASCII 裡的 pipe '|' 用過 unix 的應該知道它是作什麼的,舉一個簡單的例子,如果你用 ftp 上傳一個 "四.doc" 的檔名到 unix ,傳完後立刻變成 "北.doc',我想太多人有過這種經驗,原因無他,中文字 "四" 的 BIG5 碼是"A57C",當 unix 看到 7C 時會覺得莫名其妙,上傳一個 "|" 給我做什麼?於是就自己處理掉了... 因此,你可以想像只要是中文字第二個byte是 "7C" 的,保證也都難逃BIG5的魔掌。 許蓋功的解決之道 一、去除程式裡出現問題那段程式碼裡的stripslashes函數,如此,除了顯示"許蓋功"時可能變成"許蓋功"之外,似乎沒有太大的問題,但是,mysql server的隱碼及跳脫字元問題還是存在的。 二、使用big5_func字串處理函數集 如果你曾經仔細研究筆者在OSC裡處理許蓋功的方法,你應該就會發現[webroot]/catalog/includes/languages/tchinese 目錄下有一個叫big5_func的資料夾,其實就是網路上的高人為了解決BIG5的問題而寫的函數集,我們稱之為"big5 字串處理函數集"。 |
| | |
| | #2 |
| Junior Member 註冊日期: 2005-05-25 住址: 無
文章: 1
|
所以.... 統一中文字也沒辦法解決了(簡體..繁體) 還是要靠UTF8來解決嗎???? |
| | |