要解決亂碼首先需要知道出現(xiàn)亂碼的原因:
創(chuàng)新互聯(lián)是專業(yè)的襄汾網(wǎng)站建設(shè)公司,襄汾接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行襄汾網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
一、PHP+MySQL出現(xiàn)中文亂碼的原因。
1. MYSQL數(shù)據(jù)庫的編碼是utf8,與PHP網(wǎng)頁的編碼格式不一致,就會造成MYSQL中的中文亂碼。
2. 使用MYSQL中創(chuàng)建表、或者選擇字段時設(shè)置的類型不是utf8,而網(wǎng)頁編碼不是utf8,也可能造成MYSQL中文亂碼.
3. PHP頁面的字符集與數(shù)據(jù)庫的編碼不一致。
4. PHP連接MYSQL數(shù)據(jù)庫,操作是設(shè)定的語句指定的編碼和頁面編碼,PHP頁面編碼不一致。
5. 用戶提交的HTML頁面編碼,和顯示數(shù)據(jù)的頁面編碼不一致 ,就肯定會造成PHP頁面亂碼.
二、解決中文亂碼:
1. 網(wǎng)頁編碼設(shè)置。一般在HTML代碼中的文件頭html中加入屬性:
meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″
保證,網(wǎng)頁是"utf-8"編碼。
2. PHP代碼設(shè)置。在php代碼的開始部分加入以下代碼:
header(”Content-type: text/html;charset=utf-8″);
且要求保存的文件編碼方式是utf-8,這樣就保證了該文件也是utf-8編碼。
3. 數(shù)據(jù)庫中表的字段中存儲中文的部分,要設(shè)置為utf8_general_ci類型。
4.PHP在連接數(shù)據(jù)庫操作時,要設(shè)置操作的字段類型為utf8,設(shè)置方法如下:
mysql_connect(’localhost’,'user’,'password’);mysql_select_db(’db’);mysql_query(”set names utf8;”); //**設(shè)置字符集***
?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ā)送之前有個echo輸出了一串字符串.有些header信息要求先發(fā)送,之前不能有其他輸出.你將header這句放在echo輸出之前.
另外,在上面一段代碼中,你將上傳的圖片數(shù)據(jù)直接保存到數(shù)據(jù)庫中,然后在下面取出來直接發(fā)送給瀏覽器,這是什么邏輯?你發(fā)送出去的將是圖片的原始數(shù)據(jù),瀏覽器就是按原樣顯示,一堆亂碼.如果你要讓它知道這是一張圖片,你也得使用header來標識這是圖片類型的文件.當然最后是一個單獨的php文件處理并輸出圖片格式的數(shù)據(jù)供img調(diào)用.
數(shù)據(jù)庫采用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產(chǎn)生亂碼的原因。這時候在PHP腳本里面直接SELECT數(shù)據(jù)出來的就是亂碼,需要在查詢前先使用:mysql_query("SET NAMES GBK");或mysql_query("SET NAMES GB2312");來設(shè)定MYSQL連接編碼,保證頁面申明編碼與這里設(shè)定的連接編碼一致(GBK是GB2312的擴展)。如果頁面是UTF-8編碼的話,可以用:mysql_query("SET NAMES UTF8"); 注意是UTF8而不是一般用的UTF-8。假如頁面申明的編碼與數(shù)據(jù)庫內(nèi)部編碼一致可以不設(shè)定連接編碼。
事實上MYSQL配置文件my.ini中定義了2個默認編碼,分別是[client]里的default-character-set和[mysqld]里的default-character-set來分別設(shè)定默認時候客戶端連接和數(shù)據(jù)庫內(nèi)部所采用的編碼。上面指定的編碼其實是MYSQL客戶端連接服務(wù)器時候的命令行參數(shù)character_set_client,來告訴MYSQL服務(wù)器接受到的客戶端數(shù)據(jù)是什么編碼的,而不是采用默認編碼。
轉(zhuǎn)自:
這個可能是你在安裝環(huán)境的時候出現(xiàn)了問題,在安裝mysql的時候,數(shù)據(jù)庫默認的不是gb2312,是西歐字符,建議你重新安裝數(shù)據(jù)庫,或是使用wampsever集成安裝環(huán)境,默認數(shù)據(jù)庫是utf8的,只要你建的數(shù)據(jù)庫整理為utf8
網(wǎng)頁文件也保存為utf8的
(不要bom頭的那種)以后寫php就很少出現(xiàn)問題啦。要是在php文件的最上面一行再加上這么一句代碼,?php
header("Content-Type:text/html;
charset=utf-8");?,那出現(xiàn)問題的幾率就更小了。