access的中文版默認(rèn)是GBK格式的,是無法改變字符類型的,所以用php讀取的時(shí)候會(huì)亂碼。
站在用戶的角度思考問題,與客戶深入溝通,找到定興網(wǎng)站設(shè)計(jì)與定興網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋定興地區(qū)。
解決方法是:使用iconv轉(zhuǎn)換
一、使用 iconv函數(shù)制作一個(gè)轉(zhuǎn)碼的自定義從GBK轉(zhuǎn)到UTF-8的函數(shù),如以下代碼:
function enc($c){return iconv('gbk','utf-8',$c);}
二、為了寫入數(shù)據(jù)庫的編碼是符合數(shù)據(jù)庫需要的,所以我們還要制作一個(gè)從UTF-8轉(zhuǎn)向GBK的函數(shù):
function dec($c){return iconv('utf-8','gb2312',$c);}
制作好了轉(zhuǎn)碼函數(shù),接下就是正常使用了。在從數(shù)據(jù)庫里面調(diào)數(shù)據(jù)顯示在頁面的時(shí)候使用enc()函數(shù),從頁面提交數(shù)據(jù)到數(shù)據(jù)庫時(shí)使用dec()函數(shù),這樣就可以很好的解決PHP使用UTF-8編碼,ACCESS使用系統(tǒng)默認(rèn)編碼的問題了。
數(shù)據(jù)庫采用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產(chǎn)生亂碼的原因。這時(shí)候在PHP腳本里面直接SELECT數(shù)據(jù)出來的就是亂碼,需要在查詢前先使用:mysql_query("SET NAMES GBK");或mysql_query("SET NAMES GB2312");來設(shè)定MYSQL連接編碼,保證頁面申明編碼與這里設(shè)定的連接編碼一致(GBK是GB2312的擴(kuò)展)。如果頁面是UTF-8編碼的話,可以用:mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如頁面申明的編碼與數(shù)據(jù)庫內(nèi)部編碼一致可以不設(shè)定連接編碼。
事實(shí)上MYSQL配置文件my.ini中定義了2個(gè)默認(rèn)編碼,分別是[client]里的default-character-set和[mysqld]里的default-character-set來分別設(shè)定默認(rèn)時(shí)候客戶端連接和數(shù)據(jù)庫內(nèi)部所采用的編碼。上面指定的編碼其實(shí)是MYSQL客戶端連接服務(wù)器時(shí)候的命令行參數(shù)character_set_client,來告訴MYSQL服務(wù)器接受到的客戶端數(shù)據(jù)是什么編碼的,而不是采用默認(rèn)編碼。
轉(zhuǎn)自:
?php??
echo?'pimg?src="centergoods.php?action=showid='.$val['id'].'t='.time().'"?width="150"/p';??
header('content-type:'.$b['type']);?
echo?$b['pic'];
................
以上代碼在header發(fā)送之前有個(gè)echo輸出了一串字符串.有些header信息要求先發(fā)送,之前不能有其他輸出.你將header這句放在echo輸出之前.
另外,在上面一段代碼中,你將上傳的圖片數(shù)據(jù)直接保存到數(shù)據(jù)庫中,然后在下面取出來直接發(fā)送給瀏覽器,這是什么邏輯?你發(fā)送出去的將是圖片的原始數(shù)據(jù),瀏覽器就是按原樣顯示,一堆亂碼.如果你要讓它知道這是一張圖片,你也得使用header來標(biāo)識(shí)這是圖片類型的文件.當(dāng)然最后是一個(gè)單獨(dú)的php文件處理并輸出圖片格式的數(shù)據(jù)供img調(diào)用.