2008年4月18日 星期五

編碼問題

網頁流程:
[login.php]登入頁面-->[check.php] 登入 -> [tpolygondemo2.php] 首頁
_>[name.php]新增會員 ->[addmember.php] 新增會員至資料庫


網頁編碼皆選擇 utf-8 ,
name.php的表單資料(變數)傳遞給在背後的addmember.php,進行insert to DB動作
要在DB management 上看到繁體中文,需要在addmember.php裡面的資料庫連結部分加上


mysql_query("SET NAMES 'utf8'");
這是寫繁體中文進資料庫的方法


試著用mysql_query("SET NAMES 'big5'");
結果在DBM看到的是亂碼(非一堆問號,是中文字..)


以上都是網頁編碼選擇UTF-8 ,那反過來呢?
如果網頁編碼選擇 big5
連結資料庫時 加上mysql_query("SET NAMES 'big5'");


沒問題 ~ 正常顯示


試著用mysql_query("SET NAMES 'utf8'");
這裡忘記了.. 只依稀記的應該也是中文亂碼


目前寫進資料庫 ~ 沒問題了~


那讀出來呢? 問題大了 ~~~


0~7 是 陣列資料 利用下列方式

$fields_data = mysql_fetch_row($result)

再用 foreach($fields_data as $name => $value ) // 把每一筆直印出來

{echo "$name : $value
" ; }

圖中"問號"就是繁體部分.. 現在要解決的就是中文讀取問題囉~

參考 MySQL 中文編碼徹底研究 作者jaceju 寫的非常詳細,值得花時間去看

文中提到

當 MySQL 要寫入資料或讀出資料時,它無法確定這些資料的格式是不是符合使用者的要求。這時候我們就得自行指定正確的編碼,讓 MySQL 自動轉換這些資料。因此,在對 MySQL 4.1 以後的版本下達 INSERT, UPDATE 及 SELECT 指令之前,都應該要先用以下指令來指定正確的連線校對

SET NAMES 'utf8'

也就是說在 MySQL 4.1 以後,就算我們把預設字集設為 big5 或 utf8 ,事實上還是得看資料庫或資料表實際所設定的校對編碼 (除非建立時採用繼承值) 。所以 SET NAMES 只會影響 MySQL 伺服端和 PHP 程式之間的通訊編碼格式,跟預設字集沒有太大關係。

看樣子使用utf-8頁面編碼比起big5 會方便許多,之前寫的網頁都是用big5,趁還沒太多網頁,全部改為utf-8了

跟寫入時一樣, 讀取時 設定 SET NAMES 'utf8' 編碼目前都沒問題了

沒有留言:

張貼留言

try comments