echo顯示中文亂碼的問題
PHP代碼如下:
echo "
ISBN:".$isbn."
書名:".$name."
作者:".$author."
";
資料由資料庫中擷取後賦值到$isbn。
顯示亂碼
加代碼:
echo "";
後:
怎麼解決啊??
------解決方案--------------------
沒事為何要加mysql_set_charset("gbk");?
難怪會這樣,所以才覺得資料庫裡的不是UTF8
mysql_set_charset("gbk"); 等於 mysql_query("set names gbk"); 你已經轉過一次,再轉UTF8。。。
------解決方案--------------------
utf-8 編碼的 書名 在 gbk 環境中會顯示成 涔﹀悕
此時從資料庫中讀取的資料顯示正常
由此可知:從資料庫讀取的資料是 gbk 編碼的,這一點可從發出 utf-8 語言聲明後,亂碼情況反過來了加以佐證
按你目前的情況,你需要 $isbn = iconv('gbk', 'utf-8', $isbn); 即將讀出的資料做從 gbk 到 utf-8 的編碼轉換
並應有 header('Content-type: text/html;charset=utf-8'); 語言聲明的頭
出現這種現象的原因是:
資料庫為 latin1 的
欄位是 utf8 的
插入是的資料是 gbk 的
由於沒有在插入資料時聲明字元集,所以 gbk 的內容被當做 latin1 插入到了 欄位中
讀出時同樣也沒有聲明字元集,於是欄位中的資料又當做 latin1 原樣讀回來了
其實這是很正常的,資料庫本來就不該改變儲存的資料
不然放進倉庫的是汽車,取回時變成了摩托,那不就亂了套了嗎?
對於資料庫已有的資料也只有這樣了,如不想放棄則需要做轉碼處理(很費事的)
以後再插入和讀取資料時一定要注意:先執行 set names XXX 指令,注意:這個 XXX 是當前資料的字元集名
比如將 gbk 資料插入就 mysql_query("set names gbk");
將資料按 utf-8 取回就 mysql_query("set names utf8");